ThinkPHP 8 默认不依赖PATH_INFO,优先从$_SERVER['REQUEST_URI']或$_SERVER['QUERY_STRING']解析路由;仅当配置'url_pathinfo'=>true、使用强依赖PATH_INFO的扩展、或受限环境才需启用,并须严格配置Nginx与php.ini;推荐用try_files + ?$query_string方案。

不需要开 PATH_INFO,除非你明确需要它。
ThinkPHP 8 默认完全不依赖 PATH_INFO。它优先从 $_SERVER['REQUEST_URI'] 或 $_SERVER['QUERY_STRING'] 解析路由,只要 Nginx 正确把请求交给 index.php 并完整传递查询参数,框架就能正常工作。
什么时候才要开 PATH_INFO?
只有满足以下任一条件时,才需启用并配置 PATH_INFO:
- 在
config/app.php中手动设置了'url_pathinfo' => true - 使用了强依赖
$_SERVER['PATH_INFO']的自定义中间件、插件或老系统对接逻辑 - 部署环境受限(例如某些云函数网关、老旧反向代理),只允许通过 PATH_INFO 传路径信息
开了之后要注意什么?
一旦启用,Nginx 就不能只靠 try_files —— 还必须精准提取并注入 PATH_INFO:
-
root必须指向public/目录(不是项目根目录) - PHP location 块中要包含:
-
fastcgi_split_path_info ^(.+\.php)(/.+)$; -
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;(注意是$realpath_root,不是$document_root) -
fastcgi_param PATH_INFO $fastcgi_path_info;
-
-
php.ini中cgi.fix_pathinfo必须为1(默认值,但 Docker 或加固环境常被改成0)
更推荐的做法是:不用 PATH_INFO,用 try_files + ?$query_string
这是 ThinkPHP 5/6/8 官方默认兼容模式,稳定、安全、无需额外配置 PATH_INFO:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
它不触发 PATH_INFO 解析,也不怕中文路径、子目录、HTTPS 跳转干扰,绝大多数场景下更省心。
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











