Nginx中的空值到PATH_INFO返回垃圾值

当由nginx设置的PATH_INFO是空string时,我从PHP访问它时得到一些垃圾字符。

这是我如何在nginx中设置PATH_INFO:

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

它工作正常,如果path信息有一些非空值。 我什至重新安装nginx,但它没有帮助。 nginx的版本是1.0.5(我使用Ubuntu 11.10,如果有的话)。

我几天前得到了同样的东西..因此,我改变了正则表达式看起来像这样:

 fastcgi_split_path_info ^(.+\.php)(/.*)$; 

并添加了一个视图,使其最有可能对Apache的工作。

以下是我对fastcgi_params文件所做的全部差异

 @@ -3,13 +3,22 @@ fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; -fastcgi_param SCRIPT_FILENAME $request_filename; +#fastcgi_param SCRIPT_FILENAME $request_filename; 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_split_path_info ^(.+\.php)(/.*)$; +fastcgi_param PATH_INFO $fastcgi_path_info; +set $path_translated ""; +if ($fastcgi_path_info) { + set $path_translated $document_root$fastcgi_path_info; +} +fastcgi_param PATH_TRANSLATED $path_translated; +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 

使用这个配置你总是有PATH_INFO变量,而不是在Apache中如何完成它。

我使用的一些脚本就是这样检查的(当然)不适用于我的配置:

 if (!isset($_SERVER['PATH_INFO']) { doSomething() } 

我建议主开发人员将其更改为:

 if (!isset($_SERVER['PATH_INFO'] || empty($_SERVER['PATH_INFO']) { doSomething() } 

如果你想看看我的全服务器配置,只需看看这个github-repository: https : //github.com/SimonSimCity/webserver-configuration/

编辑:我发现一个稍微不同的解决方案的博客。 我还没有测试,但似乎有点小;) http://www.jzxue.com/fuwuqi/http-iis-apache/201108/19-8538.html

 set $path_info ""; set $real_script_name $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param SCRIPT_FILENAME /var/html/$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info;