Laravel 5.3本地环境下获取子域名值的技术问询
获取Laravel子域名参数的正确姿势
嘿,作为Laravel新手能折腾子域名路由已经很赞啦!你的思路其实是对的,不过可能有几个细节需要调整,让我们一步步来解决:
首先,先确认本地的域名解析没问题——你得在hosts文件里把主域名和子域名都指向127.0.0.1,不然Laravel根本接收不到子域名的请求:
127.0.0.1 localhost.vibrant-invitations.com 127.0.0.1 sadmin.localhost.vibrant-invitations.com
接下来优化你的路由写法,硬编码域名不太灵活,我们可以把主域名放到配置文件里:
在config/app.php里添加一行:
'domain' => 'localhost.vibrant-invitations.com',
然后调整路由分组,这样后续域名变更只需要改配置就行:
Route::group(['domain' => '{subdomain}.' . config('app.domain')], function () { Route::get('/', function ($subdomain) { // 这里用first()比get()更合适,因为你是按用户名查单个用户 $user = DB::table('users')->where('name', $subdomain)->first(); // 调试的时候可以清晰看到子域名和匹配结果 dd('当前子域名:' . $subdomain, '匹配到的用户:', $user); }); }); // 主域名的路由保留 Route::get('/', function () { return '欢迎来到主域名页面!'; });
如果之后你需要在路由组以外的地方获取子域名,也可以直接从请求里解析:
// 方法1:从路由参数获取(前提是路由定义了{subdomain}) $subdomain = request()->route('subdomain'); // 方法2:手动解析域名 $hostParts = explode('.', request()->getHost()); $subdomain = $hostParts[0]; // 这里要注意如果是多级域名的情况,比如xxx.yyy.com,需要调整索引
最后还有两个小提醒:
- 每次修改路由后,记得运行
php artisan route:clear清除路由缓存,不然可能看不到变化 - 如果你的场景允许主域名也走这个路由组,可以把参数设为可选:
'{subdomain?}.' . config('app.domain'),然后在闭包里判断$subdomain是否为空
内容的提问来源于stack exchange,提问作者yash Raj
相关产品推荐
相关产品推荐

