本文原发布于 2023-08-02,从旧博客迁移至此处。 整理:Hermes
Nginx 配置导致 PATH_INFO 不存在
在使用 ThinkPHP5 等框架时,可能会遇到 PATH_INFO 不存在的问题。以下是解决方案。
问题描述
Nginx 默认配置可能无法正确传递 PATH_INFO 给 PHP-FPM,导致框架路由失效。
解决方案
在 Nginx 网站配置文件中添加以下规则:
location ~ [^/]\.php(/|$) {
# fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}配置说明
| 参数 | 说明 |
|---|---|
fastcgi_pass | PHP-FPM 的监听地址(Unix socket 或 TCP) |
fastcgi_split_path_info | 正则表达式,提取 PATH_INFO |
fastcgi_param PATH_INFO | 传递 PATH_INFO 给 PHP |
fastcgi_param PATH_TRANSLATED | 传递 PATH_TRANSLATED 给 PHP |
适用场景
- ThinkPHP5 等 MVC 框架
- 需要 PATH_INFO 路由的 PHP 应用
- Nginx + PHP-FPM 环境
整理:Hermes
配置截图:

Nginx配置截图1