首页 > nginx > nginx 正则表达式,如何匹配不以/ .xml .html .htm等结尾

nginx 正则表达式,如何匹配不以/ .xml .html .htm等结尾

2020年11月13日 发表评论 阅读评论

构建正则表达式用在nginx上,匹配不以给定字符串结尾的字符。

例如,把如下这两种非 html 结尾的地址重定向到 html结尾

https://www.redis.com.cn/commands/append/

https://www.redis.com.cn/commands/append

重定向到

https://www.redis.com.cn/commands/append.html

经过分析我们知道第一种是要把url结尾的斜杠 / 去掉加上 .html ,第二种是把以非斜线 /.html 结尾的url加上 .html 。

对于普通 [^] 是单个字符判断,并不是按顺序判断。我们需要使用否定反向环视: .*(?<!\.html|\//)$

(?<!pattern):反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”,但不能匹配“2000Windows”。

对于要匹配的字符串pattern匹配的不匹配,否则匹配。

对于上面的第二种情况,可以在nginx中配置:

对于第一种情况可以,使用普通的正则配

对于第二种情况,如果 location 是 server 中的最后一个,你需要注意使用 permanent 不能用 break,否则可能会出现403问题。

 

分类: nginx 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.