我想创建一个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(根据文档可能是邪恶的)。
答案 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不允许多个条件
替换结束时的?
会切断原始请求中的参数