域名绑定未生效主因是缓存未清对:tp5 路由规则固化在 runtime/route.php,php think clear 不删它,必须手动删除该文件;若启用 redis 缓存,还需精准清除 think_route:* 类 key;同时检查 app_host 硬编码、模板编译文件及浏览器/cdn 301 缓存。

域名绑定配置未生效,90%不是路由或配置写错了,而是缓存没清对地方——你删了 runtime/cache/,但框架实际读的是 runtime/route.php 或 Redis 里缓存的路由映射表。
为什么改了 domain.php 还是跳不到对应模块
ThinkPHP5 的域名绑定逻辑在路由解析阶段完成,一旦生成 runtime/route.php,后续所有请求都直接 require 它,完全绕过 route/domain.php 的重新加载。哪怕你改完配置、执行了 php think clear,只要 runtime/route.php 没被删,新域名规则就永远不会生效。
-
php think clear默认不删runtime/route.php,只清runtime/cache/、runtime/log/等目录 - TP5 不支持
php think clear:route命令(那是 TP6+ 才有的),必须手动删 - 若启用了 Redis 缓存驱动,且路由也进了 Redis(如通过
Route::rule()动态注册),那删文件根本没用
必须手动删掉 runtime/route.php 才能生效
这是 TP5 域名绑定配置刷新最直接有效的动作,别信“清缓存成功”的提示,直接验证文件是否存在:
- Linux/macOS:运行
ls -l runtime/route.php,存在就删:rm -f runtime/route.php - Windows:进
runtime\目录,手动删除route.php文件(不要删整个runtime文件夹) - 删完后访问任意页面触发自动重建——新域名绑定规则才会真正载入
注意:runtime/route.php 是单文件,不是目录,删错成 runtime/route/ 会导致后续报错。
Redis 驱动下域名绑定失效的排查点
如果你在 config/cache.php 中把 default 设为 'redis',那路由缓存很可能也被写进了 Redis(尤其用了 Route::import() 或动态注册):
- 先确认是否真走 Redis:在控制器里加
dump(Cache::getDriverName());,输出redis就得去 Redis 清数据 - 进 Redis CLI,执行
KEYS think_route:*或SCAN 0 MATCH think_route:* COUNT 1000查路由相关 key - 别直接
FLUSHDB——可能连 session、用户缓存一起清掉;用DEL精准删匹配到的 key - TP5 默认不设 prefix,所以 key 可能就是
think_route或带哈希的长串,需人工确认
清完仍不生效?检查这三处硬编码残留
域名绑定依赖完整路由链路,以下位置的缓存或配置若没同步更新,照样白清:
-
runtime/temp/下的模板编译文件(如template_*.php)可能缓存了旧的url()生成逻辑,导致生成的链接还是老域名——执行rm -f runtime/temp/*.php -
config/app.php中的'app_host' => 'xxx'若硬编码了旧域名,会覆盖route/domain.php的绑定结果 - 浏览器或 CDN 缓存了 301 跳转(比如旧域名做了强制 HTTPS 重定向),此时清服务端缓存无效,需加
Cache-Control: no-cache测试或换无痕窗口
真正起效的标志是:访问新绑定的域名时,Route::domain('api.xxx.com') 对应的闭包或模块被调用,且 Request::domain() 返回值正确——而不是页面能打开就以为成功。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











