我目前正在使用Vagrantbuild立一个本地开发的机器。 一切运行,因为它应该期望查询参数不传递给PHP页面上。
这意味着在www.example.com/?a=b上查询参数是可访问的,但在www.example.com/subpage/?a=b则不是。
我发现使用谷歌这个问题的一般答复是修改try_files指令,但这不适合我。 我也检查了php.ini的request_order & variables_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_params为fastcgi_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指令。