如何设置phpEnv以启用PathInfo路径解析功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计647个文字,预计阅读时间需要3分钟。
《原创内容如下:
nginx location 块必须重写匹配逻辑
phpEnv 的默认 nginx 配置用的是 location ~ \.php$,这种写法会严格匹配以 .php 结尾的请求,根本不会把 /index.php/abc/def 这类路径交给 PHP 处理 —— 它直接 404 或返回静态文件。
你需要改成能捕获 pathinfo 的正则,并手动提取 SCRIPT_NAME 和 PATH_INFO:
- 把原配置中类似
location ~ \.php$ { ... }的块,替换成location ~ \.php(/|$) { ... } - 在该 block 内添加
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; - 紧接着设置
fastcgi_param PATH_INFO $fastcgi_path_info;和fastcgi_param SCRIPT_NAME $fastcgi_script_name; - 务必确认
fastcgi_param SCRIPT_FILENAME指向的是真实 PHP 文件路径(如$document_root$fastcgi_script_name),不是拼出来的假路径
php.ini 必须开启 cgi.fix_pathinfo=1
即使 nginx 正确传了 PATH_INFO,PHP 本身也会在内部做一次路径截断。
本文共计647个文字,预计阅读时间需要3分钟。
《原创内容如下:
nginx location 块必须重写匹配逻辑
phpEnv 的默认 nginx 配置用的是 location ~ \.php$,这种写法会严格匹配以 .php 结尾的请求,根本不会把 /index.php/abc/def 这类路径交给 PHP 处理 —— 它直接 404 或返回静态文件。
你需要改成能捕获 pathinfo 的正则,并手动提取 SCRIPT_NAME 和 PATH_INFO:
- 把原配置中类似
location ~ \.php$ { ... }的块,替换成location ~ \.php(/|$) { ... } - 在该 block 内添加
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; - 紧接着设置
fastcgi_param PATH_INFO $fastcgi_path_info;和fastcgi_param SCRIPT_NAME $fastcgi_script_name; - 务必确认
fastcgi_param SCRIPT_FILENAME指向的是真实 PHP 文件路径(如$document_root$fastcgi_script_name),不是拼出来的假路径
php.ini 必须开启 cgi.fix_pathinfo=1
即使 nginx 正确传了 PATH_INFO,PHP 本身也会在内部做一次路径截断。

