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_order
与variables_order
中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;
}
Run Code Online (Sandbox Code Playgroud)
因为我对服务器设置和管理不太了解,所以我在这里碰壁了,但我还检查了一些事情:
$query_string
设置/etc/nginx/fastcgi_params
为fastcgi_param QUERY_STRING $query_string;
对我来说似乎正确。fastcgi_params
是正确的由于它不在子页面上时工作,我现在怀疑位置块不匹配,但我真的不明白这是怎么回事 - 请帮忙。
您需要使用 $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)
查询字符串以问号开头。
然后在第二个块中设置:
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
指令。
归档时间: |
|
查看次数: |
9196 次 |
最近记录: |