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
asfastcgi_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;