簡體   English   中英

子域路由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)所建議,從子域組中排除不需要的控制器。

其次,在用戶成功登錄后-將其重定向到沒有子域的地址。 您可以通過使用您的實現覆蓋auth中間件(必須實現TerminableMiddleware接口)來實現。

即:

  1. 用戶在頁面https://auth.example.com並登錄。
  2. 您對auth中間件的覆蓋會檢查是否成功登錄。
  3. ...並將用戶重定向到https://example.com/home或其他任何地址...

那應該足夠了。

我發現所有鏈接/路由都以子域為前綴的問題,即使它們不在路由組中也是如此。 問題出在Illuminate HTML鏈接構建器上。 它呈現相對鏈接而不是完整的絕對鏈接。

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

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

linkRoute()函數將路由組考慮在內,並根據需要應用子域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM