插件窝 干货文章 nginx怎么开启pathinfo

nginx怎么开启pathinfo

fastcgi php Nginx Pathinfo 696    来源:    2025-04-22

在Nginx中开启Pathinfo支持

Pathinfo是一种URL模式,允许通过类似/index.php/controller/action的形式传递参数。在Nginx中默认不开启Pathinfo支持,需要手动配置。

开启Pathinfo的方法

方法一:修改Nginx配置文件(推荐)

  1. 打开Nginx的站点配置文件(通常在/etc/nginx/sites-available//etc/nginx/conf.d/目录下)

  2. 找到处理PHP的location块,修改为以下配置:

location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php/php7.4-fpm.sock; # 根据实际PHP版本修改
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;

    # 添加以下Pathinfo支持配置
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
  1. 添加一个专门处理Pathinfo的location块:
location ~ \.php(/|$) {
    fastcgi_pass   unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_index  index.php;
    include fastcgi.conf;

    # Pathinfo支持
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}

方法二:使用try_files指令

location ~ \.php {
    try_files $uri =404;
    fastcgi_pass   unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_index  index.php;
    include fastcgi.conf;

    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
}

验证配置并重启Nginx

  1. 测试Nginx配置是否正确:
sudo nginx -t
  1. 如果测试通过,重启Nginx服务:
sudo systemctl restart nginx

注意事项

  1. 确保PHP配置中cgi.fix_pathinfo设置为1(在php.ini中):
cgi.fix_pathinfo=1
  1. 出于安全考虑,建议限制Pathinfo的使用范围,只对特定目录或文件启用。

  2. 不同PHP版本可能需要调整fastcgi_pass的路径,请根据实际情况修改。

  3. 如果使用Docker或其他容器环境,配置方式可能有所不同。