【问题标题】:nginx remove / rewrite GET Parameters for specific URLnginx 删除/重写特定 URL 的 GET 参数
【发布时间】:2015-09-04 15:19:06
【问题描述】:

我想创建一个 nginx localtion 做以下操作

给定网址:

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

任务:

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

我的尝试:

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

但这不起作用。 ;)

如果是 s.o. 那就太好了。可以给我一个提示。

编辑:

nginx 似乎根本不匹配正则表达式的 GET-Parameters(在位置行中),因此您必须使用 $args 并检查 if(根据文档,这可能是邪恶的)。

【问题讨论】:

    标签: regex nginx location rewrite


    【解决方案1】:

    这应该可行:

        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-statements 的集合是一种变通方法(描述为here),因为 nginx 不允许多个条件

    • 替换末尾的? 会切断原始请求中的参数

    【讨论】:

    • 嘿,Carsten,试过了,但 nginx 似乎根本不匹配正则表达式的 GET-Parameters(在位置行),所以你必须使用 $args 并检查 if(根据文档,这可能是邪恶的)。
    • 我无法让反向引用匹配工作:ItemID=$1 我正在运行 nginx/1.7.12。
    猜你喜欢
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    相关资源
    最近更新 更多