假设我感兴趣的查询参数是arg1=val1
。我希望 nginx 仅在请求的 uri 是/
且查询参数arg1
不存在时添加查询参数。预期行为如下所示:
要求:
/
预计传递至后端:
/?arg1=val1
要求:
/?arg2=val2
预计传递至后端:
/?arg1=val1&arg2=val2
要求:
/path1
预计传递给后端(如果请求的 uri 不是,则不要添加参数/
):
/path1
要求:
/?arg1=valx&arg2=val2
预计传递给后端(如果参数已经存在,则不要更改其值):
/?arg1=valx&arg2=val2
我尝试过的nginx.conf
如下:
location / {
if ($args !~ ^(.*)(arg1=)(.*)$) {
rewrite ^(/)$ /?arg1=val1 last;
}
......
}
但其并没有像预期的那样发挥作用。
我应该如何配置nginx
才能实现预期的行为?
答案1
要仅匹配 /,请使用 =。尝试
location = / {
if ($args = "") {
set $args arg1=val1;
# or rewrite / /?arg1=val1 last;
}
if ($args !~ "arg1=") {
set $args $args&arg1=val1;
}
}
您可以通过输入 server{} 块来获取调试输出,了解 nginx 如何处理您的指令:
error_log /var/log/nginx/error.log debug;