Why is PHP $_REQUEST array empty?

I installed nginx on Ubuntu Hardy and immediately realized that the PHP scripts were getting empty request arrays, ie whether GET or POST nothing was coming through, even the $_REQUEST array was empty.

When I switch back to Apache it was all fine.

The installation nginx version is 0.6.35-0ubuntu1.1~hardy1 and PHP is PHP Version 5.2.4-2ubuntu5.10.

What could be wrong?


Check if this set in your "location"-section for your fastcgi-module

 fastcgi_param  QUERY_STRING     $query_string;

http://wiki.nginx.org/NginxHttpFcgiModule


It's a feature of the try_files command in nginx that the query_string is not passed automatically to the rewritten file but instead must be passed explicitly. Because of this _$SERVER['QUERY_STRING'] is always empty, and so the the variables $_REQUEST and $_GET are also not set.

From the Nginx documentation:

Unlike with rewrite, $args are not automatically preserved if the fallback is not a named location. If you need args preserved, you must do so explicitly:

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

or with just the arguments

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

If you want to guarantee to get the original arguments then use $query_string which is the same as $args except that $query_string is read-only.