我在 Ubuntu Hardy 上安装了 nginx,并立即意识到 PHP 脚本正在获取空的请求数组,即无论是 GET 还是 POST 都没有任何内容通过,甚至 $_REQUEST 数组也是空的。
当我切换回 Apache 时一切都正常。
安装nginx版本为0.6.35-0ubuntu1.1~hardy1,PHP为PHP版本5.2.4-2ubuntu5.10。
可能出了什么问题?
答案1
检查您的 fastcgi 模块的“位置”部分是否进行了此项设置。
fastcgi_param QUERY_STRING $query_string;
答案2
try_files command
nginx的一个特性是query_string
不会自动传递给重写文件,而是必须显式传递。由于它_$SERVER['QUERY_STRING']
始终为空,因此变量$_REQUEST
和$_GET
也未设置。
与重写不同,如果 fallback 不是命名位置,则不会自动保留 $args。如果需要保留 args,则必须明确执行此操作:
try_files $uri $uri/ /index.php?q=$uri&$args;
或者只使用参数
try_files $uri $uri/ /index.php?$args;
如果您想保证获得原始参数,那么使用与只读$query_string
相同的参数。$args
$query_string
答案3
尝试检查变量顺序在 nginx 使用的 php 配置文件中。
答案4
如果 Apache 有以下情况,则可能会发生这种情况LimitRequestBody
(请参阅核)或SecRequestBodyLimit
(见mod_security) 设置并且请求体大于该限制。