如何设置Laravel路由,以便:
mysite.com/login
导航到LoginController
somecompany.mysite.com/login
导航到TenantLoginController
我有一个Laravel 5.7应用,该应用的典型登录页面为mystite.com/login
我想为此应用设置一个子域,例如somecompany.mysite.com
,该子域将具有自己的身份验证。
我希望somecompany
用户登录somecompany.mysite.com/login
主站点登录的路由定义
Route::group(['namespace' => 'App\Http\Controllers\Auth', 'middleware' => ['web']], function () {
Route::get('login', 'LoginController@showLoginForm')->name('login');
});
子主机登录的路由定义
Route::domain('somecompany.mysite.com')->group(function ($router) {
$router->group(['namespace' => 'App\Http\Controllers\Tenant\Auth', 'middleware' => ['web']], function($router) {
$router->get('login', 'TenantLoginController@showLoginForm')->name('somecompany.login');
});
});
我可以导航到somecompany.mysite.com/login
,URL栏显示somecompany.mysite.com/login
,但是当我这样做时,请求实际上路由到了'LoginController@showLoginForm'
控制器,而不是预期的'TenantLoginController@showLoginForm'
,并且显示的是典型的登录表单,而不是子域的登录表单。
如果我将路径更改为$router->get('tenant-login'
并导航到somecompany.mysite.com/tenant-login
,则会显示子域登录表单,而somecompany.mysite.com/login
显示主登录表单。
答案 0 :(得分:2)
由于您没有在第一个路由中指定域(由LoginController
处理),因此该域对于somecompany.mysite.com
子域也应有效。
要解决此问题,我建议尝试为第一条路线添加更多特异性,并用Route::domain('mysite.com')
括起来。
Laravel路由器始终采用第一个匹配路由,最后一个匹配就很好了。