Nginx & PHP-FPM: Query parameters won't be passed to PHP

I am currently setting up a machine for local development using Vagrant. Everything runs as it should, expect query parameters aren't passed to PHP on subpages.

That means on www.example.com/?a=b, the query parameter is accessible, but on www.example.com/subpage/?a=b it's not.

The general reply I found using Google for this problem is to modify the try_files directive, but that isn't working for me. I've also checked the request_order & variables_order in php.ini – everything is setup correctly there.

This is my config:

 server {
     listen                80;
     server_name           example.com www.example.com;
     root                  /var/www/public;

     location / {
         index   index.html index.htm index.php;
         try_files $uri $uri/ /index.php?$query_string;
         include /etc/nginx/fastcgi_params;
     }

     location ~ \.php$ {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $request_filename;
         include /etc/nginx/fastcgi_params;
     }

     sendfile off;
}

Since I don't know much about server setup & administration, I am hitting a brick wall here, still here are a few things I also checked:

  • $query_string is set in /etc/nginx/fastcgi_params as fastcgi_param QUERY_STRING $query_string; which seems correct to me.
  • The path to fastcgi_params is correct

Since it works when not being on a subpage, I am now suspecting the location blocks not matching, but I really don't understand how this could be the case – please help.


You need to use $is_args for question mark & $args or $query_string for query string afterwards question mark.

here it's the last combination.

try_files $uri $uri/ /index.php$is_args$query_string;

Also be sure that you have set

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;

then pass it fastcgi;

fastcgi_pass 127.0.0.1:9000;