Laravel中如何用url()或route()助手生成带子域名的链接?
解决Laravel子域名登录链接生成问题
问题根源
你给子域名和主域名的登录路由设置了相同的名称admin.login,Laravel在匹配命名路由时,会按路由注册顺序返回对应链接,导致直接调用route('admin.login')只会返回主域名的地址。
解决方案
1. 给子域名路由设置唯一名称
修改子域名路由组内的登录路由名称,避免和主域名路由重名:
Route::group(['domain' => '{subdomain}.' . env('APP_URL'), 'prefix' => 'console', 'namespace' => 'admin', 'middleware' => 'subdomain'], function () { Route::get('/login', 'LoginController@index')->name('admin.subdomain.login'); // 设置唯一命名 });
2. 生成子域名登录链接
在邮件代码中调用路由时,传入目标子域名参数即可生成正确链接:
// 替换为实际业务中的子域名,比如 'store001' $targetSubdomain = 'your-subdomain'; $subdomainLoginUrl = route('admin.subdomain.login', ['subdomain' => $targetSubdomain]);
备选方案(不修改路由名称)
如果不想调整路由命名,可在调用route()时强制指定子域名模板:
$subdomainLoginUrl = route('admin.login', [], ['domain' => 'your-subdomain.' . env('APP_URL')]);
不过这种方式可读性较差,不如修改路由名称的方案稳妥。
内容的提问来源于stack exchange,提问作者Saswat
相关产品推荐
相关产品推荐

