I have my routes set up as follows:
\'{username}.u.\'.env(\'APP_DOMAIN\'),
], function () {
Route::get(\'/\', \
Unfortunately I did not get an answer to my comment. This answer assumes the problem is that normal default routes are used instead of routes with subdomain.
Example:
A user is visiting sub.website.com but route() returns website.com/blabla instead of sub.website.com/blabla
You can solve this by dynamically create the pattern for domain inside routes.php
// routes.php
$url_parameters = @explode(".", $_SERVER['HTTP_HOST']);
if (count($url_parameters) == 3)
{
$pattern = '{subdomain}.{domain}.{tld}';
}
else
{
$pattern = '{domain}.{tld}';
}
Route::group(['domain' => $pattern], function () {
Route::get('/', [
'as' => 'get_index',
'uses' => 'HomeController@getIndex'
]);
}
By using this method you will create a problem with your route() and controller parameters.
route() problem
When calling the route() function while using this method you will get a missing argument error. The route() function expects you to give the {subdomain}.{domain}.{tld} parameters.
You can solve this by creating your own route function. I named it mdroute() (multi domain route).
function mdroute($route, $parameters = [])
{
$data = [
'domain' => \Request::route()->domain,
'tld' => \Request::route()->tld
];
$subdomain = \Request::route()->subdomain;
if ($subdomain) $data['subdomain'] = $subdomain;
// You can use mdroute('blabla', 'parameter')
// or mdroute('blabla', ['par1' => 'parameter1', 'par2' => 'parameter2'])
//
if (is_array($parameters))
{
$data = array_merge($data, $parameters);
}
else
{
$data[] = $parameters;
}
return route($route, $data);
}
Controller problem
The parameters {sub}.{domain}.{tld} are always send to your controller. You can't access other parameters the way you are used to be.
Example:
// Domain = sub.webite.com
// Your route
//
Route::get('/post/{id}/{param2}', [
'uses' => 'PostController@getIndex'
]);
// PostController
//
public function getIndex($id, $param2)
{
// $id will be 'sub'
// $param2 will be 'website'
}
You can solve this by accessing your parameter through the Request object.
public function getIndex(Request $request)
{
$id = $request->id;
$param2 = $reqeust->param2;
}