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

Sve*_*ven 4 nginx php-fpm querystring

我目前正在使用 Vagrant 为本地开发设置一台机器。一切都按预期运行,期望查询参数不会在子页面上传递给 PHP。

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

我发现使用 Google 解决此问题的一般答复是修改try_files指令,但这对我不起作用。我还检查了request_ordervariables_orderphp.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;
}
Run Code Online (Sandbox Code Playgroud)

因为我对服务器设置和管理不太了解,所以我在这里碰壁了,但我还检查了一些事情:

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

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

ris*_*sin 8

您需要使用 $is_args 作为问号和 $args 或 $query_string 作为问号之后的查询字符串。

这是最后一个组合。

try_files $uri $uri/ /index.php$is_args$query_string;
Run Code Online (Sandbox Code Playgroud)

还要确保您已设置

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
Run Code Online (Sandbox Code Playgroud)

然后通过fastcgi;

fastcgi_pass 127.0.0.1:9000;
Run Code Online (Sandbox Code Playgroud)


Xav*_*cas 0

查询字符串以问号开头。

然后在第二个块中设置:

fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)

删除include /etc/nginx/fastcgi_params;第一个块,因为这里没有任何fastcgi_pass指令。