TP6路由不生效的三大主因是配置未开启、缓存未清除、文件位置错误;需确认url_route_on和url_route_must为true,清空runtime/route.php,并确保路由文件位于route/app.php且正确引入Route门面。

路由不生效,八成不是写错了,而是没开开关、没清缓存、没放对位置——TP6的路由默认是“关着门”的,得手动拧开三道锁。
检查 url_route_on 和 url_route_must 是否为 true
TP6 默认不强制走路由,哪怕你写了 Route::get(),框架也可能直接跳过它去匹配控制器/方法路径。必须确认 config/app.php 中这两项已显式设为布尔值 true:
-
'url_route_on' => true:开启路由解析(必要) -
'url_route_must' => true:强制所有请求必须命中路由规则(推荐,否则/index/index这类传统 URL 仍能访问,掩盖问题)
注意:不要写成字符串 "true" 或数字 1,PHP 类型校验会失败;改完后必须清缓存,否则配置不加载。
删掉 runtime/route.php 或执行 php think route:clear
TP6 会把路由规则编译缓存到 runtime/route.php。一旦你改了 app/route/app.php 或新增了多应用路由文件,旧缓存不清理,新路由就永远不生效。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
立即学习“PHP免费学习笔记(深入)”;
- 开发时最稳操作:
php think route:clear(TP6.0+ 原生命令) - 没命令行权限?直接删除
runtime/route.php文件(不是目录),下次请求自动重建 - 别手滑删了
runtime/config/——里面是数据库连接等关键配置缓存,删了会报Class not found或host is null
确认路由文件位置和命名是否符合 TP6 规范
TP6 对路由文件的位置、命名、引入方式极其敏感,错一个就静默失效:
- 单应用模式:必须放在
route/app.php(不是app/route/app.php) - 多应用模式:每个应用的路由文件必须是
app/{name}/route/app.php,且config/app.php的app_map要声明该应用名 - 文件开头必须有
use think\facade\Route;,缺这句Route::get()直接报Class 'Route' not found - Linux 下若路由文件夹
route/权限异常(如 644),会导致加载失败,可试chmod -R 755 route/
验证路由是否真被加载:运行 php think route:list
这是最直接的诊断手段。如果命令输出为空,或没看到你写的路由,说明它根本没被框架读到:
- 先确认当前是 TP6 环境:
php think version,TP5 没route:list命令 - 输出里出现
Route not found或Command "route:list" is not defined,大概率是app_route配置为 false 或命令未注册 - 如果列表里有路由但访问 404,重点查 Nginx/Apache 是否拦截了 404(比如配置了
error_page 404),导致 TP6 的Route::miss()根本没机会执行
真正容易被忽略的是:TP6.0.0~6.0.7 存在路由解析 bug,升级到 6.0.8+ 可解决一批“明明写了却匹配不到”的诡异问题——别死磕配置,先 composer update topthink/framework。


















