最常见原因是缓存未清除或路由文件路径错误:thinkphp6+默认使用app/route/app.php(单应用)或app/{name}/route/app.php(多应用),而非config/route.php;需确认app/config/app.php中'route_config_file'=>'route.php',并执行php think route:clear清缓存。

改了 route.php 但路由还是旧的
不是代码没写对,而是框架根本没加载你刚改的文件——最常见原因是缓存没清或文件路径错了。ThinkPHP 6+ 默认把路由定义放在 app/route/app.php(单应用)或 app/{name}/route/app.php(多应用),而不是 config/route.php 或 route/route.php。如果写在错的位置,框架压根不会 require 它。
确认方式:在 public/index.php 底部加一行 dump(\think\Route::rules());,访问首页看输出里有没有你新加的规则。没有就说明文件没被加载。
-
app/config/app.php中必须有'route_config_file' => 'route.php'(TP6)或对应多应用配置 - 多应用下,
app/admin/route/app.php的路由只对admin应用生效,主应用不认 - 文件顶部必须有
use think\facade\Route;,否则Route::get()会报类未找到 - 别把路由写在控制器、中间件或闭包里——这些地方不会被框架自动扫描
APP_DEBUG=true 时改了也白改
只要 APP_DEBUG=true,无论你执行过多少次 php think route:cache,框架都会跳过 runtime/route.php,每次请求都重新解析全部路由文件。看起来“改了就生效”,其实是假象;一旦切到生产环境(APP_DEBUG=false),旧缓存还在,新规则就彻底失效。
验证方法:在任意控制器里加 dump(\think\App::debug());,输出 true 就说明调试模式开着,缓存不参与匹配。
-
.env和config/app.php都要检查,后者优先级更高,'app_debug' => false必须是布尔值,不能是字符串"false" - CI/CD 部署脚本里如果只改了代码没关 debug,上线后必然出问题
- 别依赖“本地能跑通”来判断线上是否 OK——本地 debug 模式掩盖了缓存逻辑
伪静态没配好,根本进不到路由层
访问 /user/list 报 404,但 /index.php/user/list 能打开,这就是铁证:Web 服务器没把请求转发给 index.php,框架连入口都没进,更别说读你的 route.php 了。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
Apache 下重点看三件事:mod_rewrite 是否启用、.htaccess 是否在 public/ 目录、对应 <directory></directory> 块里是否有 AllowOverride All。
Nginx 下关键看 try_files 规则是否完整,且最后一项是 /index.php?$query_string(TP6+),不是 /index.php?s=$uri(TP5)。
- 子目录部署(如
/myapp/)时,try_files的 fallback 要改成/myapp/index.php?$query_string - 别用
rewrite ^(.*)$ /index.php/$1 last;—— 它会丢掉$_GET参数 - 确认
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,不能用$request_filename
runtime/route.php 没重建或权限不对
清缓存不是删文件那么简单。php think clear:route 会删掉 runtime/cache/route.php 及关联临时锁,而 rm -f runtime/route.php 可能残留索引导致后续 route:cache 静默失败。
执行 php think route:cache --annotation 前,必须确保两件事:APP_DEBUG=false,且 Web 进程用户(如 www-data)对 runtime/ 有写权限。Docker 环境尤其容易因 UID 不一致导致 route.php 创建为空。
- 部署脚本里这三步必须串行:
php think clear:route→ 检查 debug 和权限 →php think route:cache --annotation - 执行完后立刻验证:
ls -l runtime/cache/route.php看文件大小是否 >1KB,head -n5 runtime/cache/route.php看内容是否含你新加的路由 - 多应用项目,每个应用的
runtime/cache/都要单独清理和重建
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










