【问题标题】:Empty value to PATH_INFO in nginx returns junk valuenginx 中 PATH_INFO 的空值返回垃圾值
【发布时间】:2011-11-25 07:30:35
【问题描述】:

当 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,如果有关系的话)。

【问题讨论】:

  • 请举例说明路径及其生成的值。
  • 当 url 类似于 http://localhost/myapp/index.php 时,PATH_INFO 应该为空,但返回垃圾。当它类似于http://localhost/myapp/index.php/testing 时,PATH_INFO 是“/testing”。
  • 当你说它返回垃圾时,你能举一个这个垃圾的例子吗?
  • 随机字符;有时是字母表,有时是特殊字符,如 |,有时是一些不可读的字符,如 �,

标签: nginx php


【解决方案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. 中的完成方式。阿帕奇。

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

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; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多