子域路由Laravel 5


Sub-Domain Routing Laravel 5

我一直在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/homemysite.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.:

  1. 用户已登录https://auth.example.com
  2. 您对auth中间件的覆盖检查是否成功登录
  3. 。。。并将用户重定向到CCD_ 10或其他

这就足够了。

我发现了一个问题,我的所有链接/路由都以子域为前缀,即使它们在路由组之外。问题出在Illuminate HTML链接生成器上。它渲染相对链接,而不是完全绝对链接。

因此,不使用:{!! HTML::link('contact', 'Contact Us') !!}

我应该使用:{!! HTML::linkRoute('contact_route_name', 'Contact Us') !!}

linkRoute()函数考虑路由组,并根据需要应用子域。