thinkphp6路由缓存清除失败主因是未清对位置:php think clear不清理runtime/route.php,须用php think route:clear或手动删除该文件;同时确认app_route=true、路由写在正确路径、app_debug=false且排除opcache/伪静态干扰。

ThinkPHP6路由缓存清除失败,通常不是命令没运行,而是清的“不是地方”或“没清干净”。最典型表现是:改了 app/route/app.php,执行了 php think clear 或 php think clear:cache,但访问新路由仍 404,php think route:list 也看不到新增规则。
确认是否真在清路由缓存
php think clear 默认只清 runtime/cache/、log/、session/、trace/ 四个目录,完全不碰路由缓存。路由缓存单独存在 runtime/route.php(TP6)或 runtime/route/ 目录下,必须用专用命令:
- 清空路由缓存文件:运行
php think route:clear - 若该命令报错或无效,直接删掉
runtime/route.php(单文件模式)或整个runtime/route/目录 - 再访问一次任意页面,框架会自动重建
route.php或重新生成路由映射
检查路由开关和注册位置
即使清了缓存,如果基础配置没打开或写错位置,新路由也不会生效:
- 打开
config/app.php,确认'app_route' => true是布尔值 true(不能是字符串"true") - 路由规则必须写在
app/route/app.php(单应用)或app/{name}/route/app.php(多应用),不能写在config/route.php - 检查该路由文件顶部有
use think\facade\Route;,否则Route::get()等调用会报错或静默失效
验证路由缓存是否被跳过
开发阶段常误以为“缓存导致问题”,其实可能是缓存根本没启用:
- 在控制器里加
dump(\think\App::debug());,输出true表示APP_DEBUG = true→ 路由缓存不会加载,你看到的 404 是真实解析失败,不是缓存残留 - 此时应检查路由语法、控制器路径、方法签名(如资源路由要求
show($id))、命名空间是否匹配 - 临时关闭路由缓存:在
config/route.php中设'route_cache' => false,重启请求看是否恢复
排查多级干扰源
有时清完 PHP 层路由缓存,请求仍卡在更外层:
-
Web 服务器伪静态:Nginx/Apache 没把请求正确转发给
index.php,导致压根没进框架。检查配置中是否有try_files $uri $uri/ /index.php?$query_string; -
OPcache 缓存了路由文件字节码:尤其部署在宝塔、Docker 或 PHP-FPM 环境时,改了
app/route/app.php但 OPcache 还在用旧编译结果。执行service php-fpm restart或opcache_reset()强制刷新 - 浏览器或代理缓存:带重定向的路由(如登录跳转)可能被 CDN 或浏览器缓存 301,换无痕窗口或加时间戳参数测试
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











