thinkphp路由生效需五步:一开总开关app_route为true;二写入route/app.php并引入route类;三用--with-route参数查列表且清缓存;四优先用get/post等语义方法注册;五开启强制路由时须显式定义首页路由。

新手配置ThinkPHP路由时,最常卡在“写了却完全不生效”这个环节——不是语法错,而是开关没开、路径写错、缓存没清这三处物理断点直接拦住所有后续操作。
第一步:确认路由总开关已打开
打开 config/app.php 文件,找到 【'app_route' => true】 这一行。必须是布尔型 true,不能是字符串 "true"、数字 1 或被注释掉。这是硬性前提,关了它,整个 route/app.php 文件都不会被加载,写再多 Route::get() 都等于白纸。
多应用项目(如 app/admin/)需单独检查对应子应用目录下的 config/app.php,主应用的设置不继承给子应用。
第二步:把路由规则写进正确文件
路由规则只能写在 route/app.php(单应用)或 app/{name}/route/app.php(多应用),【不是 config/route.php】。后者只管全局行为开关(比如是否强制路由),不承载任何 Route::get() 语句。
文件开头必须写 use think\facade\Route;,否则所有 Route::get() 都会报 Class not found。
文件不能为空或只剩注释——框架可能跳过整个加载流程,至少写一条有效路由,比如 Route::get('/', 'index/index');。
第三步:命令行下启用路由加载
执行 php think route:list 查看路由列表时,必须加 【--with-route】 参数:php think route:list --with-route。否则默认不加载路由,输出永远为空。
修改完路由文件后,立刻执行 php think route:clear 清除路由缓存。缓存不清理,新规则永远不会生效。
第四步:用明确方法注册,别混用 rule()
方法一:优先用语义化快捷方法
Route::get('user/:id', 'user/read'); —— 只响应 GET 请求,安全可控;Route::post('login', 'auth/login'); —— POST 才触发,不会被 GET 撞入。
方法二:慎用 Route::rule()
Route::rule('user/:id', 'user/read'); 默认匹配所有 HTTP 方法(method => '*'),POST 请求也能撞进本该只响应 GET 的逻辑,可能绕过 CSRF 防护、触发中间件错位,甚至造成数据误删。
如果非要用 rule(),必须显式指定 method:Route::rule('user/:id', 'user/read', 'GET');,等效于 Route::get()。
第五步:首页必须显式定义(开启强制路由时)
第一步:在 config/route.php 中设 'url_route_must' => true,开启强制路由。
第二步:立即在 route/app.php 中添加 Route::get('/', 'index/index');。
第三步:否则访问根域名(如 http://localhost:8000)直接返回 404,框架拒绝走默认控制器逻辑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











