nginx rewrite 规则正则表达式不匹配某个单词

发布时间:2020-04-23编辑:脚本学堂
有关nginx rewrite规则中使用正则表达式匹配的例子,nginx rewrite全用正则不匹配某个单词的方法,需要的朋友参考下。

nginx中,rewrite一个地址从:
/mag/xx/xxx/ -> /m/xxx
但原先 /mag/xx/more/ 要保留

以下是整个测试过程:
起初是这样:
 

location ~* ^/mag/[^/]+/[^(more)]+/ {
rewrite ^/mag/[^/]+/(.*) /m/$1 permanent;
}

[]的写法并不凑效,里面是匹配单个字符的,这样无效,匹配不了

小范同学提供了非某单词的写法 (?!more)
 

location ~* ^/mag/[^/]+/(?!more)([^/]+)/ {
rewrite ^/mag/[^/]+/(.*) /m/$1 permanent;
}

这个写法勉强可以应付了,后面的匹配单元虽说还不完美,但也能够对付我的所有需求内容了。
有需要的可以参考此写法。

常用分组语法

捕获
 

(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?’name’exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言
 

(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(? …