Regex nginx删除/重写特定URL的GET参数
我想创建一个nginx localation,执行以下操作 给定URL: example.com/foo/bar/123456?ItemID=123456&aid=0&bid=0 任务: 如果两个数字相同且aid和bid为零,则将url重新写入example.com/foo/bar/123456 我的尝试: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.能给我一
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
-语句集是一种变通方法(已描述),因为nginx不允许多个条件if
- 替换结束时的
会切断原始请求的参数?
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;
} }