只有当请求的uri是/并且特定查询参数不存在时,如何configurationnginx才能添加查询参数?

假设我感兴趣的查询参数是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; } ...... } 

而且它不像预期的那样工作。

我应该如何configurationnginx来实现预期的行为?

只匹配/ use =。 尝试

 location = / { if ($args = "") { set $args arg1=val1; # or rewrite / /?arg1=val1 last; } if ($args !~ "arg1=") { set $args $args&arg1=val1; } } 

你可以得到debugging输出,告诉你nginx如何处理你的指令,通过放入你的服务器{}块:

 error_log /var/log/nginx/error.log debug;