nginx 中的正则表达式先行问题
regex lookahead problems in nginx
我有一个这样的 url 列表:
iphone-repair/iphone-4s-repair/iphone-4s-lcd-repair
iphone-repair/iphone-4s-repair/iphone-4s-glass-repair
iphone-repair/iphone-4s-repair/iphone-4s-glass-amp-lcd-replacement
我想这样重写它们:
iphone-repair/iphone-4s-repair/iphone-4s-screen-repair
我是这样工作的:
rewrite ^(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?) https://${server_name}-screen-repair last;
问题是还有这样的网址:
iphone-repair/iphone-4s-repair/iphone-4s-front-glass-amp-lcd-amp-back-glass-replacement
我们不希望发生任何重写。
所以我一直在用头敲击键盘,试图了解如何在 "front" 出现时中止整个匹配。
我试过了
^(.*?)-(?<!front-)(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.+)?
但它似乎并没有中止整个比赛...
非常感谢任何帮助!!
你可以试试这个
(?!.+-front)
Negative Lookahead,断言 url 不包含 front
^(?!.+-front)(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?)
请看link上的解释。
我有一个这样的 url 列表:
iphone-repair/iphone-4s-repair/iphone-4s-lcd-repair
iphone-repair/iphone-4s-repair/iphone-4s-glass-repair
iphone-repair/iphone-4s-repair/iphone-4s-glass-amp-lcd-replacement
我想这样重写它们:
iphone-repair/iphone-4s-repair/iphone-4s-screen-repair
我是这样工作的:
rewrite ^(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?) https://${server_name}-screen-repair last;
问题是还有这样的网址:
iphone-repair/iphone-4s-repair/iphone-4s-front-glass-amp-lcd-amp-back-glass-replacement
我们不希望发生任何重写。
所以我一直在用头敲击键盘,试图了解如何在 "front" 出现时中止整个匹配。
我试过了
^(.*?)-(?<!front-)(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.+)?
但它似乎并没有中止整个比赛...
非常感谢任何帮助!!
你可以试试这个
(?!.+-front)
Negative Lookahead,断言 url 不包含 front
^(?!.+-front)(.*?)-(glass|glass-.*?lcd|lcd)-.*?(replacement|repair)(.*?)
请看link上的解释。