route::domain()不生效主因是请求未进入匹配逻辑,需确保nginx透传http_host、域名正确解析、闭包内重写全部路由且注册顺序合理。

域名绑定后 URL 访问异常,90% 是请求根本没进到 Route::domain() 匹配逻辑里——不是路由写错了,是框架压根没拿到 Host 头或没走到对应 domain 分支。
Route::domain() 不生效的典型现象
比如你写了 Route::domain('api.example.com'),但访问 http://api.example.com/v1/user 直接 404,而 http://www.example.com/index/index 却能正常响应。这说明全局路由还在跑,但域名下没注册任何规则。
- 浏览器地址栏输子域名直接报 DNS 错误或连接被拒绝 → 本地 hosts 或 Web 服务器
server_name没配 - 能解析域名但返回 Nginx/Apache 原生 404 页面(无
X-Powered-By: ThinkPHP响应头)→ 请求没进框架,伪静态或入口接管失败 - 能进框架但
php think route:list里完全看不到该域名下的路由 →Route::domain()闭包里没写任何子路由,或文件根本没加载 - 访问子域名时路由匹配到了主域名的规则 → 注册顺序错,
Route::domain('www.example.com')写在了Route::domain('api.example.com')前面,且路径前缀有重叠
Nginx 必须透传 HTTP_HOST 才能触发域名路由
ThinkPHP 的 Route::domain() 依赖 $_SERVER['HTTP_HOST'] 做匹配。Nginx 默认不把 Host 头传给 PHP-FPM,很多精简模板会漏掉这行:
fastcgi_param HTTP_HOST $http_host;
没这行,$_SERVER['HTTP_HOST'] 就是空或默认值,Route::domain() 直接跳过。
- 检查站点配置或
fastcgi_params文件是否包含该参数 - 如果用了
try_files $uri /index.php?$query_string,确保没额外重写 URL 导致 Host 被覆盖 - 阿里云轻量、腾讯云 CVM 的默认 Nginx 模板常删掉这一行,手动补上并
nginx -s reload - Apache 用户注意
mod_rewrite是否开启,且.htaccess中别用RewriteCond %{HTTP_HOST}干扰原始 Host
本地开发时域名路由不生效的根本原因
不是框架问题,是环境没对齐:你的机器不知道 admin.test 应该指向谁,Web 服务器也不知道该把 Host: admin.test 的请求交给哪个项目。
- Windows 改
C:\Windows\System32\drivers\etc\hosts,加:127.0.0.1 admin.test - macOS/Linux 改
/etc/hosts,同样加:127.0.0.1 admin.test - Nginx 配置里必须有
server_name admin.test;,且root指向项目public目录 - 绝对不要用
php -S内置服务器跑域名绑定——它根本不解析 Host 头,Route::domain()在里面永远不触发
调试时 route:list 不显示子域名路由怎么办
php think route:list 默认只输出主域名(app.domain)下的路由,其他 Route::domain() 定义的规则不会列出来。这不是 bug,是设计如此。
- 别靠
route:list判断子域名路由是否注册成功,改用var_dump(Route::getRules())查看完整规则数组,确认domain键下是否有对应子数组 - 多个域名共用相同路径前缀(如都定义了
admin/),ThinkPHP 按注册顺序匹配,后注册的会被吞掉,且不校验当前 Host 是否真匹配该 domain - 泛域名(如
*.example.com)必须显式调用$r->get()等方法注册内部路由,不能只写闭包 - 开启
url_domain_deploy才能让url()辅助函数生成带对应域名的链接,否则始终拼主域名
最常被忽略的是:你以为 Route::domain() 是“叠加”生效,其实它是“命中即停”。一旦某个 domain 闭包被选中,就只在这个闭包里找路由;闭包外写的 Route::rule() 对这个域名完全无效。这点在调试时尤其容易绕晕。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











