ThinkPHP5的Route::domain()绑定后不读取模块,本质是域名作用域内未定义具体路由(如group()或rule()),导致框架无法匹配模块路径;必须配合group()使用,并确保模块目录结构、命名空间与Nginx透传HTTP_HOST三者严格一致。

ThinkPHP5 的 Route::domain() 绑定后不读取模块,本质是路由没匹配到对应模块路径,或模块结构/命名空间未对齐——不是配置漏了,而是框架根本没走到模块加载那一步。
domain() 后必须接 group() 或 rule(),不能光写域名
很多人在 route.php 里只写 Route::domain('admin.example.com');,以为这就绑定了,其实这行代码本身不注册任何路由,只是声明一个域名作用域。框架看到请求 Host 匹配后,会进入该 domain 分支,但若里面没定义具体路由(get()、group() 等),就会 fallback 到默认模块(通常是 index),最终报 “module not exists: index”。
- 正确写法必须带分组:
Route::domain('admin.example.com')->group(function () { Route::get('/', 'admin/index/index'); }); - 如果想整个域名都走
admin模块,用group()并显式加模块前缀:Route::domain('admin.example.com')->group(['namespace' => 'app\admin\controller'], function () { Route::rule('[:id]', 'index/read'); }); - 别在
domain()后直接写bind('admin'),TP5 不支持这种混用,会干扰模块解析顺序
模块目录结构和命名空间必须严格匹配路由写法
TP5 路由解析模块时,会按 Route::get('xxx', '模块/控制器/操作') 中的模块名去 app/模块/ 目录找,同时要求控制器类在对应命名空间下。常见翻车点:
-
Route::get('/', 'admin/index/index')→ 框架去找app/admin/controller/Index.php,类名必须是app\admin\controller\Index - 如果实际目录是
app/Admin/(首字母大写)或app/admin_controller/(名字不对),就会报错 - 检查
app/admin/config.php里的'app_namespace' => 'app\admin'是否与实际命名空间一致 - Linux 服务器上大小写敏感,
App\Admin和app\admin是两个路径,别本地开发用 Windows 测试完就上线
本地测试时 hosts + Web 服务器配置缺一不可
本地跑 admin.test 域名,浏览器打不开或 404,大概率不是 TP5 问题,而是请求压根没进框架:
立即学习“PHP免费学习笔记(深入)”;
- 必须改系统
hosts文件,加127.0.0.1 admin.test - Nginx 配置里
server_name admin.test;必须存在,且root指向项目public/目录 - 别用
php -S内置服务器——它不传HTTP_HOST,Route::domain()永远不触发 - Apache 用户确保
mod_rewrite开启,且.htaccess里没用RewriteCond %{HTTP_HOST}二次拦截,干扰框架 Host 解析
Nginx 需透传 HTTP_HOST,否则 domain() 失效
线上部署后域名绑定看起来“没反应”,访问直接跳首页或 500,查日志常看到 Undefined index: HTTP_HOST —— 这说明 Nginx 没把 Host 头传给 PHP-FPM。
- 检查 Nginx 配置中是否包含:
fastcgi_param HTTP_HOST $http_host; - 很多一键脚本(如宝塔、阿里云轻量模板)默认删了这行,手动补上即可
- 如果用了
try_files,避免写成try_files $uri /index.php?_url=$uri这种丢 Host 的重写;推荐用try_files $uri /index.php?$query_string - 验证方法:在
index.php顶部加var_dump($_SERVER['HTTP_HOST']);,看输出是否为你期望的域名
真正卡住的地方往往不在 route.php 写法,而在于模块路径、命名空间、Nginx Host 透传这三者是否咬合。少一个,domain() 就是空转。



















