Php Laravel,不同子域上的同一路径使用了错误的控制器 问题:
如何设置Laravel布线,以便:Php Laravel,不同子域上的同一路径使用了错误的控制器 问题:,php,laravel,laravel-5,url-routing,Php,Laravel,Laravel 5,Url Routing,如何设置Laravel布线,以便: 导航到mysite.com/login使用LoginController 导航到somecompany.mysite.com/login使用TenantLoginController 我在做什么 我想要一个Laravel5.7应用程序,它有一个典型的登录页面,比如说,mysite.com/login 我想为这个应用程序设置一个子域,比如somecompany.mysite.com,它将拥有自己的身份验证 我希望somecompany用户登录somecomp
- 导航到mysite.com/login使用
LoginController
- 导航到
使用somecompany.mysite.com/login
TenantLoginController
mysite.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
显示主登录表单。因为您没有在第一个路由中指定域(由LoginController
处理),它也应该对somecompany.mysite.com
子域有效
为了解决这个问题,我建议尝试为第一条路由添加更多的特殊性,用route::domain('mysite.com')
将其括起来
Laravel路由器始终采用第一条匹配的路由,并且第一条路由最终匹配得很好。只是一个偶然的机会,但由于您没有在第一条路由中指定域(由
LoginController处理)
),它也应该对somecompany.mysite.com
子域有效。因此,我建议尝试为第一条路由添加更多的特殊性,用route::domain('mysite.com')将其括起来
?Laravel路由器总是选择第一条匹配的路由,并且第一条路由最终匹配得很好。@LupinityLabs你我的朋友是100%对的!如果我在域调用中包装主路由,一切都会正常工作。给出答案,我会接受。谢谢你的帮助!很高兴我能提供帮助!完成,谢谢:-)您可以更改管线定义的顺序。首先放置特定的域路由,然后放置常规路由。Laravel使用最后加载的路由,而不是第一个匹配的路由。如果您有多条相同的路由,则会触发上次加载/注册的路由。就像css类一样。