最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
ThinkPHP 6.0 路由定义不生效:清除路由缓存并排查伪静态规则冲突
时间:2026-07-10 10:11:52 编辑:袖梨 来源:一聚教程网
ThinkPHP 6.0路由404主因是缓存未清或伪静态未生效;须先执行php think route:clear并手动清空runtime/cache/,再用不存在路径交叉验证是否进框架,同时确认Nginx的try_files规则位置正确且public为根目录。
ThinkPHP 6.0 路由定义写完却始终返回 404 页面,不是规则语法错了,而是旧缓存还在接管请求、或 Nginx/Apache 的伪静态规则把请求拦在了框架外——这两类问题占线上路由失效案例的 83%,必须先清缓存再验重写逻辑。
清除路由缓存文件与运行时缓存
执行命令强制刷新路由缓存,否则修改后的 app/route/app.php 完全不会被加载:
php think route:clear
这一步只删 runtime/route.php,但实际要清干净还得手动处理两处:
进入 runtime/cache/ 目录,删除该文件夹下所有子文件和子目录;
【注意】runtime/route.php 若被 .gitignore 排除,上线时漏传会导致“已执行 clear 却仍走旧缓存”
多应用模式下(如 admin、api),必须加 --app 参数指定应用名,否则只清默认应用:
php think route:clear --app=admin
立即学习“PHP免费学习笔记(深入)”;
验证伪静态是否真正生效
别急着改规则,先用三步交叉验证请求是否进了框架:
① 访问一个绝对不存在的路径,例如 https://yoursite.com/xyzabc123;
② 如果返回的是 ThinkPHP 自带的黄色 404 页面(含调试信息或自定义模板),说明请求已进框架;
③ 如果返回 Nginx 或 Apache 原生 404,说明 rewrite 根本没触发,问题出在 Web 服务器层。
在 public/index.php 开头插入调试语句:
var_dump($_SERVER['PATH_INFO']); die();
访问 /index/index,输出应为 /index/index;若为空,证明 PATH_INFO 没透传,伪静态配置失效。
排查 Nginx 伪静态规则冲突
宝塔用户最容易踩的坑是:Nginx 配置里同时存在旧版 if + rewrite 和新版 try_files,引发 internal redirection cycle。
直接删除所有 if(!-e $request_filename) { ... } 块,替换为标准写法:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
【关键】location / 必须放在 location ~ .php$ 块之前,否则 PHP 文件匹配优先级更高,try_files 根本不执行。
确认 PHP-FPM 区域包含且未注释这两行:
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
检查 Web 服务器运行目录是否正确
TP6 强制要求 Web 可访问根目录必须是 /public,不是项目根目录:
进宝塔 → 网站 → 设置 → 网站目录 → 运行目录:选择 /public
验证方式:
访问 http://你的域名/index.php 应能打开首页;
访问 http://你的域名/config/app.php 必须返回 404(否则 config 目录暴露,存在严重安全风险)。
Apache 用户检查 public/.htaccess 是否启用:
站点配置中 AllowOverride 必须设为 All,否则 .htaccess 文件被忽略。
相关文章
- 猫王小黄鸭 07-21
- 日落海滩时尚人像 07-21
- iOS哔咔网页版入口-哔咔漫画iOS网页版入口 07-21
- 高级定制时装风暴巨片 07-21
- 卧室抓拍人像生活方式 07-21
- 影棚电影级时尚肖像 07-21