为什么PHP $ _REQUEST数组是空的?

我在Ubuntu Hardy上安装了nginx,并立即意识到PHP脚本获得了空的请求数组,即无论GET或POST什么都没有通过,甚至$ _REQUEST数组也是空的。

当我切换回Apache,这一切都很好。

安装nginx的版本是0.6.35-0ubuntu1.1〜hardy1,PHP是PHP 5.2.4-2ubuntu5.10。

什么可能是错的?

检查这个设置是否在你的“位置” – 你的fastcgi模块部分

fastcgi_param QUERY_STRING $query_string; 

http://wiki.nginx.org/NginxHttpFcgiModule

这是nginx中try_files command的一个特性,即try_files command不会自动传递到重写的文件,而是必须显式传递。 因为这个_$SERVER['QUERY_STRING']总是空的,所以variables$_REQUEST$_GET也没有设置。

从Nginx文档:

与重写不同的是,如果回退不是命名的位置,$ args不会自动保留。 如果你需要保存参数,你必须明确地这样做:

 try_files $uri $uri/ /index.php?q=$uri&$args; 

或者只是参数

 try_files $uri $uri/ /index.php?$args; 

如果你想保证获得原始的参数,那么使用$query_string ,它和$args相同,除了$query_string是只读的。

尝试检查nginx使用的phpconfiguration文件中的variables_order 。