[英]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/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)所建議,從子域組中排除不需要的控制器。
其次,在用戶成功登錄后-將其重定向到沒有子域的地址。 您可以通過使用您的實現覆蓋auth
中間件(必須實現TerminableMiddleware
接口)來實現。
即:
https://auth.example.com
並登錄。 auth
中間件的覆蓋會檢查是否成功登錄。 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.