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

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

我目前正在使用 Vagrant 设置一台机器进行本地开发。一切运行正常,只是查询参数不会在子页面上传递给 PHP。

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

我用 Google 找到的解决这个问题的一般方法是修改指令try_files,但这对我来说不起作用。我还检查了request_order& variables_orderin php.ini– 那里的一切都设置正确。

这是我的配置:

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

由于我不太了解服务器设置和管理,所以我在这里遇到了困难,但我仍然检查了以下几件事:

  • $query_string设置/etc/nginx/fastcgi_paramsfastcgi_param QUERY_STRING $query_string;对我来说似乎正确。
  • 路径fastcgi_params是正确的

由于它在不在子页面上时也能工作,我现在怀疑位置块不匹配,但我真的不明白怎么会这样 - 请帮忙。

答案1

您需要使用 $is_args 作为问号,$args 或使用 $query_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;

答案2

查询字符串以问号开头。

然后在第二个块中设置:

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

相关内容