Nginx和PHP-FPM:查询参数不会传递给PHP

我目前正在使用Vagrantbuild立一个本地开发的机器。 一切运行,因为它应该期望查询参数不传递给PHP页面上。

这意味着在www.example.com/?a=b上查询参数是可访问的,但在www.example.com/subpage/?a=b则不是。

我发现使用谷歌这个问题的一般答复是修改try_files指令,但这不适合我。 我也检查了php.inirequest_ordervariables_order – 所有的东西都在那里正确设置。

这是我的configuration:

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

由于我对服务器设置和pipe理了解不多,所以我在这里打了一堵砖墙,还是在这里我还检查了一些东西:

  • $query_string/etc/nginx/fastcgi_paramsfastcgi_param QUERY_STRING $query_string; 这对我来说似乎是正确的。
  • fastcgi_params的path是正确的

既然它不在子页面上工作,我现在怀疑位置块不匹配,但我真的不明白这是怎么回事 – 请帮助。

您需要使用$ is_args作为问号&$ args或$ query_string作为查询string之后的问号。

这是最后一个组合。

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

还要确定你已经设置好了

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

然后通过它fastcgi;

 fastcgi_pass 127.0.0.1:9000; 

查询string以问号开头。

然后在第二个块中设置:

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

删除include /etc/nginx/fastcgi_params; 因为在这里没有任何fastcgi_pass指令。