Laravel子域名路由如何让指定命名路由固定返回对应域名
问题根因
你当前的路由配置仅给home1绑定了子域名,没有给home2显式绑定根域名。Laravel生成未绑定固定域名的路由时,会默认复用当前请求的域名,所以你在app.example.com下生成home2路由时,会自动带上app子域名,导致跳转后子域名没有变化。
解决方案
方法1:显式给所有路由绑定固定域名(最稳妥,推荐)
给两个路由分别显式指定对应域名,后续无论当前访问的域名是什么,route()函数都会生成对应绑定域名的完整URL,无需额外处理。
- 先在
.env文件中新增域名配置,避免代码硬编码:
# 新增以下两行配置 APP_DOMAIN=example.com APP_SUB_APP_DOMAIN=app.example.com
- 修改
config/app.php,新增对应配置项读取.env的值:
return [ // 保留原有其他配置不变,新增以下两行 'domain' => env('APP_DOMAIN', 'example.com'), 'sub_app_domain' => env('APP_SUB_APP_DOMAIN', 'app.example.com'), ];
- 修改
routes/web.php的路由配置:
// 根域名路由组 Route::domain(config('app.domain'))->group(function(){ Route::get('/','ExampleController@method')->name('home1'); }); // app子域名路由组 Route::domain(config('app.sub_app_domain'))->group(function(){ Route::get('/','ExampleController@method')->name('home2'); });
配置完成后效果:
route('home1')固定返回http://example.comroute('home2')固定返回http://app.example.com
方法2:生成路由时强制指定根域名(临时适配用)
如果不想修改现有路由结构,仅需要部分场景下生成正确域名的路由,可以在调用route()函数时手动指定根URL:
// 生成home1路由时强制使用根域名 route('home1', [], true, 'http://example.com'); // 生成home2路由时强制使用app子域名 route('home2', [], true, 'http://app.example.com');
该方法需要在每次生成对应路由时手动指定参数,仅适合临时少量调用的场景,不建议全局大量使用。
验证
你可以在控制器或者视图中打印路由测试效果:
dd(route('home1'), route('home2'));
无论当前访问的是根域名还是app子域名,输出的两个路由都会符合预期。
内容的提问来源于stack exchange,提问作者abdulkadir polat
相关产品推荐
相关产品推荐

