通过使用路由器功能Laravel 5.2子域路由

通过使用路由器功能Laravel 5.2子域路由

问题描述:

我有一个使用Laravel 5.2构建的应用程序。该应用程序有3-4种不同类型的完全不同的使用情况,(如果可能,小型应用程序)。因此,我在主域名上托管主站点和管理员的路线。对于每个迷你应用程序,我创建了一个子域,所有迷你应用程序路径都有自己的子域。我已映射子域的方式是:通过使用路由器功能Laravel 5.2子域路由

$sub = str_replace('http://', '', strstr(Request::fullUrl(), '.', true)); 

if ($sub == env('APP_SUB1')) { 

//Subdomain1 routes 

} else if ($sub == env('APP_SUB2')) { 

//Subdomain2 routes 

} 

现在,我希望能够使用Laravel子域在建的子域路由,我想:

Route::group(['domain' => env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo 'Main Site'; 
     die; 
    }); 
}); 

Route::group(['domain' => '{sub1}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub1) { 
     echo 'Sub1 Site'; 
     die; 
    }); 
}); 

Route::group(['domain' => '{sub2}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub2) { 
     echo 'Sub2'; 
     die; 
    }); 
}); 

UPDATE

关于该行为的更多信息:

  1. 当用户访问www.mydomain.com/login,应显示 管理员的登录页面。
  2. 当用户访问sub1.mydomain.com/login, 时,应显示sub1应用程序用户的登录页面。
  3. 当用户访问sub2.mydomain.com/login,为 用户SUB2应用的登录页面应该显示,等等...

我早些时候通过解析完整的请求URL方法然后相应地路由用户,起作用。我想要的是更健壮和优雅的方式(所以尝试使用laravel域路由)。但是通过我在上面显示的示例代码和子域,我总是看到'Sub1 Site',而不考虑传递的子域。

+0

你只需要通过它,如果你需要在回调中使用它,我会想。 – apokryfos

+0

我试过没有通过,在这种情况下,所有的URL只打印“sub1” – gentrobot

+0

你可以更新你的问题,什么不工作,以及预期的行为应该是什么? – apokryfos

我认为在它的工作方式上存在一些误解。如果您通过在{}子域那么你基本上是说这是一个可变的子域名,这意味着'{sub1}.'.env('APP_DOMAIN')'{sub2}.'.env('APP_DOMAIN')基本上是相同的东西,但是用的子域不同的变量名:

例子:

Route::group(['domain' => '{sub1}.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function ($sub1) { 
     echo $sub1." Site"; 
     //Prints sub1 Site when visiting sub1 and sub2 site when visiting sub2 
     die; 
    }); 
}]); 

什么(我假设),你想要的是:

Route::group(['domain' => 'sub1.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo "Sub1 Site"; 
     die; 
    }); 
}]); 
Route::group(['domain' => 'sub2.'.env('APP_DOMAIN')], function() { 
    Route::get('/', function() { 
     echo "Sub2 Site"; 
     die; 
    }); 
}]); 

注意去除{}这意味着第一组将匹配字面 sub1。而不是*.<rest of domain>

+0

谢谢你指导我正确的方向。那对我来说太愚蠢了。让我试试这样做的正确方法。 – gentrobot

+0

我现在已经为主站点添加了所有路由,并且打开了所有子域路由,并将其与相应的子域分组,如您在上面的代码示例中所示。非常感谢你的帮助。 – gentrobot

我试图不经过在此情况下,所有的URL打印只有“SUB1”

当然,由于第一路径组捕获的所有请求。 您可以完全删除第二个路由组,并添加逻辑(您不应该在路由配置中执行)来处理子域。

{sub1}可能是真的,所以当你输入时,例如, “anythingreally.mydomain.com/login”它仍然会被捕获,并将子域传递给变量$ sub1。