ThinkPHP 6.0 伪静态规则核心是强制入口在 public/ 目录并依赖正确 PATH_INFO 传递;运行目录必须设为 /public,Nginx 需用 try_files 转发至 /public/index.php,废弃 __ROOT__,改用 __STATIC__,URL 大小写由 url_case_insensitive 配置控制。

ThinkPHP 6.0 的伪静态规则不是“改了几处语法”,而是底层机制和运行前提都变了——最核心的是入口强制落在 public/ 目录,且必须依赖正确的 PATH_INFO 传递。沿用 TP5.1 的 Nginx 规则,90% 会首页能打开、其他路由全 404 或报 “URL pathinfo not supported”。
运行目录必须设为 /public
这是所有配置生效的前提,不是可选项:
- 宝塔面板中:网站 → 设置 → 网站目录 → 运行目录 → 从下拉菜单选
/public(不能手动输入或留空) - 小皮(phpstudy)中:站点设置 → 运行目录 → 选择项目根目录下的
public文件夹 - 若 root 指向项目根目录(如
/www/wwwroot/myapp),即使规则写对,public/index.php也拿不到正确路径,必然 404
Nginx 转发规则必须用 try_files + 显式传参
TP6 不再兼容 TP5.1 常见的 rewrite ^(.*)$ /index.php?s= last; 写法,必须确保 PATH_INFO 和 SCRIPT_FILENAME 准确送达:
- location 块中必须包含:
fastcgi_param PATH_INFO $fastcgi_path_info; -
SCRIPT_FILENAME推荐用$realpath_root$fastcgi_script_name,避免符号链接导致路径错乱 - 推荐标准转发逻辑:
try_files $uri $uri/ /public/index.php?$query_string;(注意是/public/index.php,不是/index.php)
不再支持 __ROOT__ 拼接静态资源路径
TP6 废弃了全局 view_replace_str 配置,且模板中禁用 {__ROOT__}/static/css/app.css 这类写法:
立即学习“PHP免费学习笔记(深入)”;
-
__ROOT__会把入口脚本名(如/index.php)也拼进去,CDN 场景下 URL 错乱 - 统一改用
{__STATIC__/css/app.css},并在config/view.php中配tpl_replace_string - 配完必须清空
runtime/view/,否则缓存模板仍用旧路径
URL 大小写行为由框架控制,与 Nginx 无关
伪静态规则本身不决定大小写是否敏感,真正起作用的是框架配置:
- TP6 默认仍保留
url_case_insensitive = true(在config/app.php中) - 设为
true时,/user/read和/User/Read都能匹配User控制器的read方法 - 设为
false则需完全一致,但不推荐,易因大小写错误导致静默 404



















