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

2024-04-04

我希望将所有带有下划线的 URL 重定向到其对应的虚线。

E.g. /nederland/amsterdam/car_rental变成/nederland/amsterdam/car-rental。为此,我使用此处描述的技术:如何使用 Nginx 将下划线替换为破折号 https://stackoverflow.com/questions/15912191/how-to-replace-underscore-to-dash-with-nginx/15934256#15934256。所以我的位置块匹配:

location ~ (_) 

But I only想要在 URL 上执行此操作not in the /admin命名空间。为了实现这一点,我尝试将正则表达式与负查找结合起来:正则表达式匹配不包含单词的行? https://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word/5334825#5334825。该位置现在与:

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

Rubular 报告字符串/nederland/amsterdam/car_rental匹配正则表达式,同时/admin/stats_dashboard不匹配,正如我想要的那样。然而,当我将此规则应用于 nginx 配置时,该站点最终会陷入重定向循环。有什么是我忽略的吗?

更新:我实际上不想重写任何内容/admin命名空间。下划线到破折号的重写只能在所有 URL 上进行not in the /admin命名空间。


The Nginx位置匹配顺序 http://nginx.org/en/docs/http/ngx_http_core_module.html#location使用正则表达式定义的位置按照其在配置文件中出现的顺序进行检查,并且正则表达式的搜索在第一个匹配时终止。

有了这些知识,站在您的立场上,我将简单地使用“admin”的正则表达式定义一个位置,该位置位于您从堆栈溢出答案 https://stackoverflow.com/questions/15912191/how-to-replace-underscore-to-dash-with-nginx/15934256#15934256你链接到。

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

任何请求admin其中,无论是否有下划线,都会由第一个位置块处理,因为匹配的位置块出现在下划线之前。

** PS **

正如 cnst 在我的几天后发布的另一个答案所示,我发布的位置匹配订单文档的链接也表明您也可以使用^~修饰符来匹配/admin文件夹并跳过下划线的位置块。

我个人倾向于不使用此修饰符,并且更喜欢将基于正则表达式的位置与带注释的注释结合在一起,但这当然是一个选项。

但是,您需要小心,具体取决于您的设置,因为以“/admin”开头但更长的请求可能会与修饰符匹配并导致意外结果。

如前所述,我更喜欢基于正则表达式的安全方法,因为我知道没有人会在没有明确理解的情况下开始任意更改配置文件中的内容顺序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从正则表达式重定向中排除目录 的相关文章

  • 正则表达式中 (*) 和 .* 有什么区别? [复制]

    这个问题在这里已经有答案了 是任意字符零次或多次 我试图找到以元音开头的单词 我用了 aeiou 它给了我所有以元音开头的单词 当我这样做时给出相同的结果 aeiou 现在我正在寻找以元音结尾的单词 我做到了 aeiou 它没有给出任何结果
  • Google 文档上的正则表达式回车查找和替换

    On 谷歌文档 我想要每一个list item 我的项目符号是一个破折号 其中 20 个左右的文档中有 1 000 多个内容 需要通过额外的换行符分隔 这样可以更轻松地在移动设备上阅读 如何搜索分隔项目符号的换行符 并将其替换为两个换行符
  • sed:更改 .yml 文件中环境属性的值

    我有一个 yml 文件 用于配置应用程序的环境属性 如下所示 env1 prop1 value1 prop2 value2 propn valuen env2 prop1 value1 prop2 value2 prop3 value3 p
  • Python:如何删除圆括号内的文本?

    我试过了 但没用 return re sub myResultStats text 建议 thanks 尝试这个 return re sub myResultStats text 括号表示捕获组 因此您必须转义它们
  • 如何从列表中删除“\xe2”

    我是 python 新手 正在使用它在我的项目中使用 nltk 对从网页获得的原始数据进行单词标记后 我得到了一个包含 xe2 xe3 x98 等的列表 但是我不需要这些并想删除它们 我只是尝试过 if x in a and if a st
  • 角度抛出错误 $parse:ueoe 表达式意外结束

    我网站的这一部分有错误 我无法弄清楚 因为我几个月没有更改它 错误是 Error parse ueoe http errors angularjs org 1 4 3 parse ueoe p0 event id 3FEventContro
  • 我怎样才能重写这个nginx“if”语句?

    例如 我想这样做 if http user agent MSIE 6 0 http user agent MSIE 7 0 etc etc rewrite ROOT ROOT ancient last break 而不是这个 if http
  • 使用动态编程理解正则表达式字符串匹配

    我遇到了这个问题 要求您实现一个支持 的正则表达式匹配器 和 其中 匹配任何单个字符 匹配零个或多个前面的元素 isMatch aa a false isMatch aa aa true isMatch aaa aa false isMat
  • NGinx 域名重定向

    假设我有一个名为 xyz co 的网站 我还有其他具有相同前缀的域名 例如 xyz com xyz it xyz co it 现在 nginx 与端口 80 的 nginx conf 中的 server name xyz co 配合得很好
  • 我如何在 ruby​​ 中执行范围正则表达式,例如 awk /start/,/stop/

    我想做一个 AWK 风格的范围正则表达式 如下所示 awk hoststatus file 在 AWK 中 这将打印文件中两个模式之间的所有行 hoststatus host name myhost modified attributes
  • 设置正则表达式中的最小和最大字符

    我写了一个正则表达式 http en wikipedia org wiki Regular expression匹配任意数量的字母 字母之间有任意数量的单个空格 我希望该正则表达式也强制执行最小和最大字符数 但我不确定如何做到这一点 或者是
  • Nginx 中 uwsgi_pass 和 proxy_pass 的区别?

    我在 Nginx 后面运行 uWSGI 并一直在使用proxy pass让 Nginx 访问 uWSGI 切换到有什么好处吗uwsgi pass 如果是这样 那是什么 uwsgi pass使用一个uwsgi协议 proxy pass使用普通
  • 正则表达式匹配没有给定前缀的特定字符串

    我需要匹配包含值且没有给定前缀的所有行 例子 我想要包含的所有行word当它没有前缀时prefix So foobar gt no match prefix word gt no match prefix word suffix gt no
  • Perl Regex:如何从 CSV 行中删除引号内的引号

    我从 CSV 文件中得到了一行 作为场围场和 作为字段分隔符作为字符串 有时有 在打破场围的数据中 我正在寻找一个正则表达式来删除这些 我的字符串看起来像这样 my csv qq 123456 024003 Stuff 28 stuff w
  • Java 中修剪字符串的可能前缀

    I have String str 我想从中提取不包括可能的前缀的子字符串 abc 我想到的第一个解决方案是 if str startsWith abc return str substring abc length return str
  • 如何从 UNC 中提取服务器名称

    谁能告诉我如何从 UNC 中提取服务器名称 ex 服务器名称 目录 目录 编辑 我很抱歉 但看起来我需要澄清一个错误 路径实际上更像是 服务器名 d 目录 我知道这可能会改变一些事情 怎么样Uri Uri uri new Uri serve
  • 如果字符串中的第一个字符是逗号,则删除它

    我需要在 javascript 中设置一个函数来删除字符串的第一个字符 但前提是它是逗号 我找到了substr函数 但这将删除任何内容 无论它是什么 我当前的代码是 text value newvalue substr 1 text val
  • 在 Cocoa 应用程序中验证用户输入的 URL 的最佳方法是什么?

    我正在尝试构建一个自制的网络浏览器 以更加熟练地使用 Cocoa 我需要一种好方法来验证用户是否输入了有效的 URL 我尝试过一些正则表达式 但 NSString 有一些有趣的怪癖 并且不喜欢我见过的大多数正则表达式使用的一些反引号 你可以
  • 使用正则表达式在图像标签周围添加链接

    我想使用 preg replace 在图像标签周围添加链接 Before img href src alt After a href img href src alt a 我将非常感谢任何帮助 非常感谢 这有帮助吗 str img href
  • php 中是否可以使用正则表达式替换短语后面的单词?

    输入文本 工程学院 医学院 所需产出 教育学院 教育学院 规则 school of 后面的任何单词都需要替换为 education inputext school of engineering school of medicine rule

随机推荐