nginx中PATH_INFO的空值返回垃圾值

时间:2011-11-25 07:30:35

标签: nginx php

当nginx设置的PATH_INFO为空字符串时,从PHP访问它时会得到一些垃圾字符。

这是我在nginx中设置PATH_INFO的方式:

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

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

1 个答案:

答案 0 :(得分:1)

我在几天前得到了同样的观点..因此我将正则表达式改为:

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变量,而不是在f.e中完成的变量。的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;