php-fpm / nginx给脚本错误的path信息

我使用一个nginxnetworking服务器,我一直试图阻止一个问题,其中网站被赋予错误的$_SERVER["PHP_SELF"]variables。 这打破了一些脚本。 问题似乎是nginx给FPM提供了错误的variables。

$_SERVER["PHP_SELF"]是“/index.php/index.php”,它应该是“/index.php”

这是nginx服务器的PHPconfiguration…

 server { listen 192.168.0.3:80; server_name cacti; access_log /home/admin/cacti_access_log; error_log /home/admin/cacti_error_log; root /var/www/sites/cacti; location / { index index.php index.html index.htm; } location ~* \.php$ { fastcgi_pass unix:/var/run/php-fpm/admin-socket; fastcgi_split_path_info ^(.+\.php)(/.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; fastcgi_read_timeout 60; } } 

fastcgi_params …

 fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200; 

首先,在fastcgi_param条目之前移动fastcgi_param 。 nginx按顺序处理这些指令,所以fastcgi_params文件中的configuration将覆盖你在server块中的定义。

然后,使用PATH_INFOPATH_TRANSLATED这些设置:

 fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;