伪静态不生效的根本原因在于Web服务器入口路径、location兜底规则和PHP脚本路径三者未同时正确配置:root必须指向public/,location /需含try_files指令,PHP块须传SCRIPT_FILENAME;宝塔保存≠写入、重载≠语法正确,须手动验证.conf文件及执行nginx -t校验。

不是单纯因为没重启 Nginx 或 Apache。
伪静态不生效,重启服务只是必要步骤之一,但绝非根本原因。很多用户执行了重载(reload)甚至重启(restart),问题依旧,说明问题卡在更前置的环节。
真正关键的是三个配置必须同时对齐、真实生效:
Web 服务器入口路径必须指向
public/目录
root 指令或宝塔「运行目录」必须设为/public,而不是项目根目录。设错会导致框架类找不到、页面空白且无报错,所有 rewrite 都白搭。-
location / 块必须含兜底转发规则
推荐写法:location / { try_files $uri $uri/ /index.php?$query_string; }缺少这一行,Nginx 就不会把
/user/list这类请求转给index.php,而是直接返回 404。立即学习“PHP免费学习笔记(深入)”;
-
PHP 处理块必须传对脚本路径
在location ~ \.php$ { }里,必须有:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
漏掉这句,Nginx 错误日志会明确报
Primary script unknown——PHP 根本没收到请求。
还要注意:
- 宝塔点「保存」≠ 配置已写入,需手动打开
.conf文件确认规则是否存在 - 点「重载配置」≠ 语法正确,务必执行
nginx -t先校验 - TP6 默认用 PATHINFO 模式,
config/app.php中url_route_on必须为true,pathinfo_depr必须为'/' - 子目录部署(如
/myapp/)要单独配location /myapp/,不能套用根目录规则
查问题最高效的方式是:
先访问 http://域名/index.php/user/list —— 能打开,说明框架和 PHP 正常;
再访问 http://域名/user/list —— 404,就锁定是伪静态层没通,直接去查上面三项 + 错误日志。



















