我一直在Laravel 5中测试子域路由功能,并成功地使用了文档中描述的以下代码。当用户访问{username}.mysite.com时,用户配置文件视图将按预期显示。
Route::group(['domain' => '{username}.{tld}'], function () {
Route::get('user/{id}', function ($username, $id) {
//
});
});
但是,我期待着与我所经历的有所不同的行为。当用户通过子域访问网站时,我视图中的所有链接现在都将子域保留在其中。所有其他链接,如{username}.mysite.com/home
和{username}.mysite.com/login
等,都是完全可用的,但我不明白为什么Laravel要用子域填充我的所有链接,和/或我如何摆脱它,只为单个路由保留子域。我希望我视图中的所有其他链接都像mysite.com/home
和mysite.com/login
。我希望只是使用{username}.mysite.com
作为网站访问者的快速访问点,而不是在所有视图中保留它。
我能做些什么来改变这种行为?
将您不希望前缀为子域的路由移动到路由组之外:
// These routes won’t have the subdomain
$router->controllers([
'auth' => 'Auth'AuthController',
'password' => 'Auth'PasswordController',
]);
// These routes WILL have the subdomain
$router->group(['domain' => '{username}.{tld}'], function ($router) {
$router->get('/', 'UserDashboard@index');
$router->controller('account', 'AccountController');
$router->resource('users', 'UserController');
});
您忘记重定向用户。。。因此:
首先,正如Martin Bean所建议的,从子域组中排除不需要的控制器。
第二,在用户成功登录后,将他重定向到没有子域的地址。您可以通过用您的实现(必须实现TerminableMiddleware
接口)覆盖auth
中间件来实现这一点。
I。e.:
- 用户已登录
https://auth.example.com
页 - 您对
auth
中间件的覆盖检查是否成功登录 - 。。。并将用户重定向到CCD_ 10或其他
这就足够了。
我发现了一个问题,我的所有链接/路由都以子域为前缀,即使它们在路由组之外。问题出在Illuminate HTML链接生成器上。它渲染相对链接,而不是完全绝对链接。
因此,不使用:{!! HTML::link('contact', 'Contact Us') !!}
我应该使用:{!! HTML::linkRoute('contact_route_name', 'Contact Us') !!}
linkRoute()
函数考虑路由组,并根据需要应用子域。