Milos Sretin
Milos Sretin

Reputation: 1748

Subdomains in Laravel

Having problem with subdomains :(

In Routes:

Route::group(['domain' => 'www.app.me'], function(){
    Route::get('/', 'SiteController@index');
    Route::get('/{uri}', 'ShortnerController@redirect');
});
Route::group(['domain' => 'app.me'], function(){
    Route::get('/', 'SiteController@index');
    Route::get('/{uri}', 'ShortnerController@redirect');
});
Route::group(['domain' => 'platform.app.me'], function(){
    Route::get('/', 'PageController@index')->before('auth'); 
});
Route::group(array('domain'=>'agent.app.me'), function(){
Route::get('/', 'AgentController@index')->before('auth');
});

When I go to app.me or www.app.me it shows the SiteController@index If I go to agent.app.me it shows AgentController@index

But the problem is if I go to platform.app.me it redirects to app.me

How to solve this?

In cPanel a managed redirections like this:

Subdomains.Root Domain    Document Root    Redirection
agent.app.me              /public_html     not redirected
platform.app.me           /public_html     not redirected

Upvotes: 0

Views: 855

Answers (1)

davidnknight
davidnknight

Reputation: 462

Try changing the order. The first matched route will always be the one used. Also, if app.me is just going to use the same routes as www., why not use htaccess to force www. and have one less route group to maintain?

So, routes.php:

Route::group(['domain' => 'platform.app.me'], function(){
    Route::get('/', 'PageController@index')->before('auth'); 
});

Route::group(['domain'=>'agent.app.me'], function(){
    Route::get('/', 'AgentController@index')->before('auth');
});

Route::group(['domain' => 'www.app.me'], function(){
    Route::get('/', 'SiteController@index');
    Route::get('/{uri}', 'ShortnerController@redirect');
});

Notice that I changed your use of array() to [] in the agent.app.me route group for consistency as you were mixing the two.

And .htaccess:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

    # Enforce www where not using www or a valid sub domain or tld
    RewriteCond %{HTTP_HOST} !^(www|agent|platform)\.app\.(me|dev)$ [NC]
    RewriteRule ^(.*)$ http://www.app.me/$1 [L,R=301]

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Upvotes: 3

Related Questions