thinkphp6路由404主因是请求未进入框架,需先确认是否被web服务器截断(查响应头有无x-powered-by: thinkphp),再排查伪静态规则、入口路径、路由文件加载及配置覆盖等问题。

ThinkPHP6访问路由提示404,绝大多数情况不是你路由写错了,而是请求压根没进到框架里——Web服务器(Nginx/Apache)直接返回了原生404,public/index.php根本没被执行。先确认是否进入框架,再查路由本身。
一看响应头:判断请求是否进了ThinkPHP
用浏览器或 curl 访问一个肯定不存在的路由,比如 http://localhost/xyzabc:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 如果看到 ThinkPHP 黄色调试页,写着「找不到匹配的路由」,说明框架已接管,问题出在路由定义或缓存上
- 如果看到 Nginx/Apache 原生 404 页面,且响应头里没有
X-Powered-By: ThinkPHP,说明请求被 Web 服务器截断,没走到 PHP 层——停在这里,别调路由代码了
二查Web服务器配置:伪静态是否生效
典型表现:/user/list 报 404,但 /index.php/user/list 或 /index.php?s=/user/list 能打开。这是伪静态未生效的明确信号。
-
Nginx 用户:确认
server块中location /内有兜底规则,推荐用:try_files $uri $uri/ /public/index.php?$query_string;
注意:root必须指向项目根目录(如/www/wwwroot/myapp),不是public目录;public是入口所在子目录 -
Apache 用户:检查
public/.htaccess是否存在且内容正确,并确认虚拟主机配置中对应目录的<directory></directory>块设置了AllowOverride All -
宝塔用户:别直接选「ThinkPHP」预设规则(它适配 TP5),手动在配置文件中
location ~ \.php$之前添加:if (!-e $request_filename) { rewrite ^(.*)$ /public/index.php?s=$1 last; }
三验路由是否真正加载
能进框架但 /user/list 还是 404?运行命令看路由列表:
- 执行
php think route:list,输出为空或没你的路由 → 路由文件没加载 - 在
app/route/app.php第一行加die('loaded');,刷新页面不中断 → 该文件被跳过 - 检查
config/app.php中'url_route_on' => true是否被.env覆盖(如APP_URL_ROUTE_ON=false) - APP_DEBUG = false 时,路由会缓存到
runtime/route/,改完路由后删掉整个该目录
四盯关键细节:常见低级错误
- 忘了
use think\facade\Route;,导致Route::get()报类未找到 - 路径漏前导斜杠:
Route::get('user/list', ...)应为Route::get('/user/list', ...) - 多应用模式下,路由文件放错位置:应为
app/index/route/app.php,不是app/route/app.php - 开启
'url_route_must' => true后,静态资源(如/static/logo.png)也会 404,需显式放行:Route::rule(':path^.*\.(js|css|png|jpg)$', 'static/:path', 'GET', ['ext'=>'']);
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










