tp6路由加载失败主因是伪静态未配对和vendor/autoload.php未正确引入;需确保nginx/apache将请求重写至public/index.php,并验证autoload是否生效,否则框架无法启动、路由根本不会加载。

TP6 的路由加载失败,90% 是伪静态没配对 + vendor/autoload.php 没正确引入,不是 Composer 依赖装错了。
为什么 TP6 路由进不去、直接 404 或白屏
TP6 不靠 Composer 包“激活”路由,它靠 Web 服务器把所有非静态请求重写到 public/index.php,再由入口文件触发框架启动流程。如果伪静态规则失效,index.php 根本没机会执行,自然不会加载任何路由定义或 Composer 类。
常见错误现象:
- 访问
http://localhost:8000/admin/login直接返回 Nginx/Apache 默认 404,不报 PHP 错误 - 浏览器地址栏显示
/index.php?s=/admin/login才能访问(说明重写失败) - 用
php think serve能跑通,但部署到 Nginx 就 404 —— 这是典型伪静态缺失
关键点:public/index.php 必须被实际执行,否则 require __DIR__ . '/../vendor/autoload.php'; 这一行根本不会运行,整个自动加载链就断了。
Nginx 伪静态配置必须写的三行
别抄网上残缺片段,以下是最小可用配置,放在 server 块内(不是 location / 外层):
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
注意:
-
if (!-e $request_filename)是核心判断:只对真实不存在的文件/目录才重写 -
rewrite ^(.*)$ /index.php?s=$1 last;中的s=$1是 TP6 路由参数名,不能写成url=$1或漏掉s= - 不要加
break;—— 它会中断重写链,导致子请求无法继续匹配 - 改完配置后必须
nginx -t && nginx -s reload,光改文件不重载无效
Apache 和 phpstudy 用户怎么配
Apache 需启用 mod_rewrite,并在项目根目录(即 public 同级)放 .htaccess 文件:
<ifmodule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</ifmodule>
phpstudy 用户更简单:在站点设置里勾选「开启伪静态」,并选择「ThinkPHP」模板即可 —— 它背后就是上面那段规则。切记:这个开关必须在「站点」级别打开,不是全局设置。
验证 autoload 是否真起作用
即使伪静态配对了,如果 vendor/autoload.php 没加载,TP6 核心类照样找不到。快速验证法:
- 临时在
public/index.php开头加一行:die('autoload loaded'); - 访问任意 URL,如果看到这行字,说明入口执行了;如果还是 404,说明伪静态仍失效
- 去掉
die,在require __DIR__ . '/../vendor/autoload.php';后加:var_dump(class_exists('think\App'));—— 应输出bool(true) - 若为
false,检查vendor/autoload.php是否存在、路径是否因项目移动而错位(比如从/var/www/myapp移到/var/www/vhosts/myapp,相对路径就变了)
最易忽略的一点:TP6 的多应用扩展(如 topthink/think-multi-app)不提供路由功能,它只影响应用目录识别逻辑。路由定义仍要写在 app/route.php 或各应用下的 route/app.php 里,且这些文件能否被加载,完全取决于伪静态和 autoload 是否先就位。










