ThinkPHP6.1伪静态不生效的核心原因是请求未进入public/index.php,需按Nginx配置是否写入重载、root是否指向public目录、PHP块是否透传PATH_INFO三者对齐顺序排查;验证方式为/index.php/路由可访问而/user/list报404即确认伪静态层失效。

ThinkPHP6.1伪静态不生效,核心是请求没进到 public/index.php,而不是代码写错了。排查要从 Nginx、路径、框架三者是否对齐入手,按顺序验证比反复换规则更可靠。
确认伪静态是否真正起作用
最直接的判断方式:访问 http://你的域名/index.php/任意路由(例如 /index/hello)。
如果能打开,说明 PHP 环境、框架、入口文件都正常;
如果打不开,问题在 PHP 配置、权限或入口路径;
如果带 index.php 能通,去掉后 404,那 100% 是伪静态层没生效。
检查 Nginx 配置是否写入并重载
宝塔点“保存” ≠ 配置已生效。必须人工确认:
- 打开站点配置文件(如
/www/server/panel/vhost/nginx/your-site.conf),搜索location /或rewrite,看规则是否真实存在 - 执行
nginx -t检查语法,再运行nginx -s reload(宝塔点「重载配置」,不是「重启」) - 若用子目录(如
/myapp/),确保有独立的location /myapp/ { ... },且未被根location /覆盖
验证 root 是否指向 public 目录
这是最常被忽略的致命错误:
-
root 必须是项目根目录下的
public,例如:root /www/wwwroot/myapp/public; - 若指向项目根(
/www/wwwroot/myapp),会报Class 'think\App' not found,且无明确提示 - Windows 下路径用正斜杠,如:
root "D:/www/myapp/public";,引号不能省
检查 PHP 处理块与 PATH_INFO 透传
TP6.1 默认依赖 PATH_INFO 解析路由,漏掉关键参数会导致静默失效:
- 在
location ~ \.php$块中,必须包含这两行:fastcgi_split_path_info ^(.+\.php)(/.+)$;fastcgi_param PATH_INFO $fastcgi_path_info; - 同时确认
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;已启用(不是$request_filename) - 宝塔「防跨站攻击」白名单必须精确填
/www/wwwroot/myapp/public/(结尾斜杠不可少)
清理缓存并查看错误日志
改完配置别急着刷页面:
- 清空
runtime/cache/和runtime/route/目录 - 打开 Nginx 错误日志:
Linux 宝塔路径:/www/wwwlogs/your-site.error.log
Windows 小皮路径:c:\phpstudy_pro\extensions\nginx1.22.1\logs\error.log - 搜索关键词:
not found、Primary script unknown、No input file specified——日志里往往一句话就定位根源
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











