从正则表达式重定向中排除目录

前端之家收集整理的这篇文章主要介绍了从正则表达式重定向中排除目录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望将具有下划线的所有URL重定向到等效的虚线。

例如。 /荷兰/阿姆斯特丹/ car_rental成为/ nederland /阿姆斯特丹/汽车租赁。为此,我使用这里描述的技术:How to replace underscore to dash with Nginx.所以我的位置块匹配:

location ~ (_)

但是我只想在不在/ admin命名空间的URL上执行此操作。为了实现这一点,我尝试将正则表达式与负查询组合:Regular expression to match line that doesn’t contain a word?.现在位置与:

(?=^(?!\/admin))(?=([^_]*))

Rubular报告string / nederland / amsterdam / car_rental来匹配正则表达式,而/ admin / stats_dashboard不匹配,就像我想要的那样。但是,当我将这个规则应用到Nginx配置文件时,该站点重定向循环。有什么我忽略了吗?

更新:我实际上并不想在/ admin命名空间中重写任何内容。下划线到破折号的重写应该仅在不在/ admin命名空间中的所有URL上进行。

Nginx location matching order是使用正则表达式定义的位置按照它们在配置文件中的出现顺序进行检查,正则表达式的搜索在第一个匹配时终止。

有了这个知识,在你的鞋子中,我将简单地使用正则表达式定义一个位置,用于从你连接到的Stack Overflow Answer获得的下划线。

location ~ (\badmin\b) {
    # Config to process urls containing "admin"
}
location ~ (_) {
    # Config to process urls containing "_"
}

任何与管理员的请求都将由第一个位置块处理,无论它是否具有下划线,因为匹配的位置块出现在下划线之前。

** PS **

作为cnst发布的另一个答案,在我显示几天之后,我发布的位置匹配顺序的文档的链接也表示您也可以使用^〜修饰符来匹配/ admin文件夹,并跳过位置块下划线。

我个人倾向于不使用此修饰符,并喜欢将带正则表达式的位置与注释注释一起使用,但它肯定是一个选项。

但是,根据您的设置,您需要小心,因为以“/ admin”开头但是较长的请求可能与修饰符匹配并导致意想不到的结果。

如上所述,我更喜欢我的基于正则表达式的方法,因为知道没有人会开始任意地改变配置文件中的事物的顺序,而没有一个明确的理解。

原文链接:https://www.f2er.com/regex/357395.html

猜你在找的正则表达式相关文章