ThinkPHP6.0 Nginx伪静态必须设运行目录为/public、用try_files规则转发至/public/index.php?$query_string,并确保fastcgi_param PATH_INFO和SCRIPT_FILENAME正确配置,否则将404或报“URL pathinfo not supported”。

ThinkPHP6.0 的 Nginx 伪静态不能直接套用旧规则,必须匹配其「入口强制在 public/」和「依赖 PATH_INFO 路由解析」两大特性。配错会导致首页能打开、其他路径全 404,或提示 “URL pathinfo not supported”。
核心原则就一条:所有请求(除真实静态文件外)都要准确转发到 /public/index.php,并确保 PATH_INFO 正确传递给 PHP。
✅ 运行目录必须设为 /public
这是最容易被忽略的硬性前提。
在宝塔中:网站 → 设置 → 网站目录 → 运行目录 → 从下拉菜单选择 /public(不是手动输入,也不是留空)。
这一步决定了 $document_root 指向 public/,后续所有路径才不会错位。
✅ 使用 try_files 规则(推荐,更稳)
在站点配置的 server 块内,替换或添加以下 location / 配置:
location / {
try_files $uri $uri/ /public/index.php?$query_string;
}
配套要求:
-
root指令需指向项目根目录(如/www/wwwroot/myapp),不是public/(因为运行目录已设为/public,Nginx 会自动拼接) - PHP 处理块中
fastcgi_param SCRIPT_FILENAME必须用$realpath_root:fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
- 确保
location ~ \.php$块内有这两行(缺一不可):fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info;
⚠️ 不要用
if (!-e $request_filename)+rewrite组合——在 PHP 8.4+ 和宝塔新版中极易丢失PATH_INFO,造成路由失效。
✅ 排除静态资源,提升性能
把下面这段加在 location / 之前(Nginx 按顺序匹配,靠前优先):
location ~* \.(?:css|js|png|jpe?g|gif|webp|woff2?|ttf|eot|mp4|pdf)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
如果静态资源统一放在 /public/static/,还可加专属拦截:
location ^~ /static/ {
alias /www/wwwroot/myapp/public/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
这样 .js、图片等不走 PHP,既快又安全。
✅ 检查三项 PHP 关键配置
伪静态生效 ≠ 路由能跑通。还需确认:
- PHP 禁用函数中 未勾选
putenv和ini_set(TP6 启动时靠它们设置环境变量) -
php.ini或站点配置中开启cgi.fix_pathinfo = 1 - ThinkPHP 配置里
config/app.php中'url_route_on' => true
访问 https://yourdomain.com/index/test(不带 index.php)能正常输出,说明全部到位。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











