ThinkPHP5域名绑定必须写在application/route.php中、开启url_domain_deploy=>true、确保Host头匹配且泛域名规则置于末尾,否则路由不生效。

ThinkPHP5 的域名绑定本身不失败,失败的永远是配置位置、Host 头传递、或规则优先级冲突。 它不是“开启就自动生效”的功能,而是一套依赖明确顺序和环境配合的路由解析机制。
Route::domain() 必须写在 route.php 里,其他地方全无效
很多人把 Route::domain() 放进 config/app.php、common.php 或控制器里,结果完全不触发。框架只在路由加载阶段扫描 route.php(通常是 application/route.php)中定义的 domain 规则,其他位置写的会被忽略。
- 确认你修改的是
application/route.php,不是config/route.php或route/app.php(后者是 TP6+ 的路径) - 文件开头必须有
use think\Route;,否则Route::domain()报错未定义 - 不要在中间件或
App::event('app_init')中动态调用Route::domain()—— 此时路由已初始化完毕,规则不会被注册
url_domain_deploy => true 没开,域名匹配直接跳过
这个开关是整个域名路由机制的总闸门。没开它,Route::domain() 定义再完整也形同虚设,框架压根不读取 $_SERVER['HTTP_HOST'] 做匹配。
- 检查
application/config.php或application/extra/app.php,确保存在且值为true:'url_domain_deploy' => true - TP5 不认
APP_SUB_DOMAIN_DEPLOY(那是 TP3 的旧配置),别混用 - 如果用了多应用结构(
app/admin/这类),该配置仍要放在全局config.php,不是每个应用自己的config/app.php
本地开发时 HTTP_HOST 不匹配,导致路由 404
你在 route.php 写了 Route::domain('admin.example.com', ...),但浏览器访问 http://localhost:8000 或 http://127.0.0.1:8000,Host 头根本对不上,自然不进 domain 分支。
- 本地测试必须改
/etc/hosts(macOS/Linux)或C:\Windows\System32\drivers\etc\hosts(Windows),加一行:127.0.0.1 admin.example.com - Web 服务器(Nginx/Apache)的
server_name或ServerName必须包含该域名,否则请求连入口文件都进不去 - 绝对不要用 PHP 内置服务器(
php -S)跑域名绑定 —— 它不透传 Host 头,$_SERVER['HTTP_HOST']为空或不可靠 - 调试时可临时加一句:
dump($_SERVER['HTTP_HOST']); die();在route.php开头,确认实际收到的 Host 是什么
泛域名和精确域名顺序错乱,导致 * 覆盖了 admin
ThinkPHP5 的域名匹配是严格按注册顺序执行的,且优先级从高到低:完整域名/IP → 二级域名 → 三级域名 → 泛三级域名 → 泛二级域名。如果你把 Route::domain('*', 'index') 写在最前面,后面所有 admin、api 都不会被匹配到。
- 把泛域名规则(如
'*'或'*.user')永远放在route.php最后注册 - 避免用通配符覆盖主站:比如
Route::domain('*', 'home')会吞掉www.example.com和example.com,应拆成Route::domain('www', 'home')+Route::domain('example.com', 'home') - 若用批量注册方式:
Route::domain(['admin'=>'admin', 'api'=>'api', '*'=>'index']),数组顺序不保证执行顺序,务必改用单条语句按需注册
最常被忽略的一点:域名绑定成功后,url() 函数默认仍生成当前请求域名下的链接,不会自动带上目标域名。需要显式传参 url('index/index', [], true, 'https://admin.example.com') 或配置 url_domain_root,否则前端跳转会卡在错误域下。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











