我目前正在使用Vagrant设置一台本地开发机器.一切都按预期运行,期望查询参数不会传递给子页面上的PHP.
这意味着在www.example.com/?a=b上,查询参数是可访问的,但在www.example.com/subpage/?a=b上则不然.
我发现使用Google解决此问题的一般回复是修改try_files指令,但这对我不起作用.我还检查了request_order& PHP.ini中的variables_order – 一切都在那里正确设置.
这是我的配置:
@H_403_12@ 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_params中设置为fastcgi_param QUERY_STRING $query_string;这似乎对我来说是正确的.
> fastcgi_params的路径是正确的
由于它不在子页面上时工作,我现在怀疑位置块不匹配,但我真的不明白这是怎么回事 – 请帮忙.
最佳答案
您需要使用$is_args作为问号& $args或$query_string用于查询字符串后面的问号.
这是最后一个组合.
@H_403_12@try_files $uri $uri/ /index.PHP$is_args$query_string;
还要确保你已经设置好了
@H_403_12@fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_split_path_info ^(.+\.PHP)(/.+)$;
然后传递给它fastcgi;
@H_403_12@fastcgi_pass 127.0.0.1:9000;