nginx删除/重写特定网址

时间:2015-09-02 12:23:12

标签: regex nginx location rewrite

我想创建一个nginx localtion来执行以下操作

指定网址:

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

任务:

如果两个数字相同且辅助和出价为零,则将网址重新格式化为 example.com/foo/bar/123456

我的尝试:

location ~ ^/foo/bar/(?<prid>\d+)\?ItemID=\1&aid=0&bid=0$ {
  rewrite ^ /foo/bar/$prid? permanent;
}

但这并不奏效。 ;)

如果s.o.会很棒可以给我一个提示。

修改

nginx似乎根本没有匹配Greg-Parameters(在位置行),所以你必须使用$ args并检查if(根据文档可能是邪恶的)。

1 个答案:

答案 0 :(得分:0)

这应该有效:

    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_name按名称访问参数。

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

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