Regex nginx删除/重写特定URL的GET参数

Regex nginx删除/重写特定URL的GET参数,regex,nginx,location,rewrite,Regex,Nginx,Location,Rewrite,我想创建一个nginx localation,执行以下操作 给定URL: example.com/foo/bar/123456?ItemID=123456&aid=0&bid=0 任务: 如果两个数字相同且aid和bid为零,则将url重新写入example.com/foo/bar/123456 我的尝试: location~ ^/foo/bar/(?\d+)\?ItemID=\1&aid=0&bid=0${ 重写^/foo/bar/$prid?永久; } 但那是行不通的 如果s.o.能给我一

我想创建一个nginx localation,执行以下操作

给定URL:

example.com/foo/bar/123456?ItemID=123456&aid=0&bid=0

任务:

如果两个数字相同且aid和bid为零,则将url重新写入example.com/foo/bar/123456

我的尝试:

location~ ^/foo/bar/(?\d+)\?ItemID=\1&aid=0&bid=0${
重写^/foo/bar/$prid?永久;
}
但那是行不通的

如果s.o.能给我一个提示就太好了

编辑:

nginx似乎根本不匹配regex的GET参数(在位置行中),因此您必须使用$args并检查if(根据文档,这可能是有害的)。

这应该可以:

    location ~ /foo/bar/(\d+) {
        if ($arg_ItemID = $1)   { set $check I; }
        if ($arg_aid = 0)   { set $check "${check}A"; }
        if ($arg_bid = 0)   { set $check "${check}B"; }
        if ($check = IAB) {
            rewrite ^ /foo/bar/$arg_ItemID? permanent;
    }   }       
说明:

  • nginx不包括重写匹配中的参数。您可以通过
    $arg\u name
    按名称访问参数

  • if
    -语句集是一种变通方法(已描述),因为nginx不允许多个条件

  • 替换结束时的
    会切断原始请求的参数


Hey Carsten,尝试过这个方法,但nginx似乎根本不匹配regex的GET参数(在位置行中),因此您必须使用$args并检查if(根据文档,这可能是有害的)。我无法让back引用匹配工作:
ItemID=$1
我正在运行nginx/1.7.12。
    location ~ /foo/bar/(\d+) {
        if ($arg_ItemID = $1)   { set $check I; }
        if ($arg_aid = 0)   { set $check "${check}A"; }
        if ($arg_bid = 0)   { set $check "${check}B"; }
        if ($check = IAB) {
            rewrite ^ /foo/bar/$arg_ItemID? permanent;
    }   }