关于如何在 Nginx 位置块部分使用正则表达式的指南?

2024-03-14

Nginx 正则表达式位置语法

正则表达式可以与 Nginx 位置块部分一起使用,这是通过 PCRE 引擎实现的。

由于没有完整记录,该功能到底支持什么?


Nginx 位置:

Nginx 位置块部分有一个搜索顺序、一个修饰符、一个隐式匹配类型以及一个是否在匹配时停止搜索的隐式开关。以下数组描述了正则表达式。


# --------------------------------------------------------------------------------------------------------------------------------------------
# Search-Order       Modifier       Description                                                        Match-Type        Stops-search-on-match
# --------------------------------------------------------------------------------------------------------------------------------------------
#     1st               =           The URI must match the specified pattern exactly                  Simple-string              Yes
#     2nd               ^~          The URI must begin with the specified pattern                     Simple-string              Yes
#     3rd             (None)        The URI must begin with the specified pattern                     Simple-string               No
#     4th               ~           The URI must be a case-sensitive match to the specified Rx      Perl-Compatible-Rx      Yes (first match)                 
#     4th               ~*          The URI must be a case-insensitive match to the specified Rx    Perl-Compatible-Rx      Yes (first match)
#     N/A               @           Defines a named location block.                                   Simple-string              Yes
# --------------------------------------------------------------------------------------------------------------------------------------------

捕获组:

捕获组、表达评估()都支持,这个例子location ~ ^/(?:index|update)$匹配以以下结尾的网址example.com/index and example.com/update

# -----------------------------------------------------------------------------------------
#    ()    : Group/Capturing-group, capturing mean match and retain/output/use what matched
#            the patern inside (). the default bracket mode is "capturing group" while (?:) 
#            is a non capturing group. example (?:a|b) match a or b in a non capturing mode
# ----------------------------------------------------------------------------------------- 
#    ?:    : Non capturing group
#    ?=    : Positive look ahead 
#    ?!    : is for negative look ahead (do not match the following...)
#    ?<=   : is for positive look behind
#    ?<!   : is for negative look behind
# -----------------------------------------------------------------------------------------

正斜杠:

不要与正则表达式斜线混淆\, 在 nginx 中正斜杠/用于匹配任何子位置,包括无示例location /。在正则表达式支持的上下文中,以下解释适用

# -----------------------------------------------------------------------------------------
#     /    : It doesn't actually do anything. In Javascript, Perl and some other languages, 
#            it is used as a delimiter character explicitly for regular expressions.
#            Some languages like PHP use it as a delimiter inside a string, 
#            with additional options passed at the end, just like Javascript and Perl.
#            Nginx does not use delimiter, / can be escaped with \/ for code portability 
#            purpose BUT this is not required for nginx / are handled literally 
#            (don't have other meaning than /)
# -----------------------------------------------------------------------------------------

斜线:

正则表达式特殊字符的第一个用途\用于转义下一个字符;但请注意,大多数情况下\后面跟着一个有不同含义的字符,完整的列表是可以在这里找到 https://www.regular-expressions.info/refquick.html.

Nginx 不需要转义正斜杠/它也不否认像我们可以逃避任何其他角色一样逃避它。因此\/已翻译/匹配/。在 nginx 上下文中转义正斜杠的目的之一可能是为了代码可移植性。

其他正则表达式字符

这是可以使用的正则表达式的非详尽列表

# -----------------------------------------------------------------------------------------
#     ~     : Enable regex mode for location (in regex ~ mean case-sensitive match)
#     ~*    : case-insensitive match
#     |     : Or
#     ()    : Match group or evaluate the content of ()
#     $     : the expression must be at the end of the evaluated text 
#             (no char/text after the match) $ is usually used at the end of a regex 
#             location expression. 
#     ?     : Check for zero or one occurrence of the previous char ex jpe?g
#     ^~    : The match must be at the beginning of the text, note that nginx will not perform 
#             any further regular expression match even if an other match is available 
#             (check the table above); ^ indicate that the match must be at the start of 
#             the uri text, while ~ indicates a regular expression match mode.
#             example (location ^~ /realestate/.*)
#             Nginx evaluation exactly this as don't check regexp locations if this 
#             location is longest prefix match.
#     =     : Exact match, no sub folders (location = /)
#     ^     : Match the beginning of the text (opposite of $). By itself, ^ is a 
#             shortcut for all paths (since they all have a beginning).
#     .*    : Match zero, one or more occurrence of any char
#     \     : Escape the next char
#     .     : Any char 
#     *     : Match zero, one or more occurrence of the previous char
#     !     : Not (negative look ahead)
#     {}    : Match a specific number of occurrence ex. [0-9]{3} match 342 but not 32
#             {2,4} match length of 2, 3 and 4
#     +     : Match one or more occurrence of the previous char 
#     []    : Match any char inside
# --------------------------------------------------------------------------------------------

例子:

location ~ ^/(?:index)\.php(?:$|/)
location ~ ^\/(?:core\/img\/background.png|core\/img\/favicon.ico)(?:$|\/)
location ~ ^/(?:index|core/ajax/update|ocs/v[12]|status|updater/.+|oc[ms]-provider/.+)\.php(?:$|/)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于如何在 Nginx 位置块部分使用正则表达式的指南? 的相关文章

  • 仅匹配空格或字符串开头/结尾之间的整数的正则表达式

    我目前正在使用该模式 b d b 用这些条目测试它 numb3r 2 3454 3 214 test 我只希望它捕获 2 和 3454 它非常适合捕获数字单词 除了边界标志 b 包括 作为一个单独的词考虑 我尝试排除句点 但在编写模式时遇到
  • 如何使用正则表达式解析 OCC 选项符号?

    OCC 选项符号由 4 部分组成 标的股票或 ETF 的根代码 用空格填充至 6 个字符 到期日期 6 位数字 格式为 yymmdd 期权类型 P 或 C 用于看跌或看涨期权 执行价格 为价格 x 1000 前面填充 0 至 8 位数字 举
  • 如何在Python中的正则表达式中匹配字符串列表中的任何字符串?

    假设我有一个字符串列表 string lst fun dum sun gum 我想创建一个正则表达式 在其中的某个点 我可以匹配该列表中的任何字符串 在一个组内 如下所示 import re template re compile r el
  • 如何使用 preg_replace 实现带条件的模板

    我正在尝试实现一个管理界面 经理可以在其中创建网站元标记形成的高级规则 我有一个函数 它采用模板并用 registry 中的值替换其中的占位符 并在需要时应用修饰符 registy array profession name gt acto
  • 使用 R 从字符串中提取函数参数

    最好使用stringr包 我想创建一个函数extract 以字符串向量作为参数 vec lt c div span icon hospital user i18n t Enrolments or i18n t Paper a string
  • Java:正则表达式 - 如何获取第一个引用文本

    作为初学者regex我相信我要问的事情太简单了 但无论如何我都会问 希望它不会打扰你帮助我 可以说我有这样的文字 你好 cool1 这个词 cool2 我想获取第一个引用的文本 即 cool1 不带 我的模式应该是什么 当使用匹配器时 我如
  • 正则表达式捕获和替换可以与 Apache DirectoryMatch 指令一起使用吗?

    有谁知道是否可以在 Apache 的 DirectoryMatch 指令中使用正则表达式捕获 我想做类似以下的事情
  • 使用 Python 从网站下载所有 pdf 文件

    我遵循了几个在线指南 试图构建一个可以识别并从网站下载所有 pdf 的脚本 从而避免我手动执行此操作 到目前为止 这是我的代码 from urllib import request from bs4 import BeautifulSoup
  • 使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

    我正在尝试部署一个使用框架的路由器功能的 Angular 2 但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题 由 angular cli 构建的 Angular 应用程序具有如下文件结构 dist 08c42df75
  • 如何使用 sed 仅删除双空行?

    我找到了这个问题和答案 https stackoverflow com questions 4651591 howto use sed to remove only triple empty lines关于如何删除三重空行 但是 我只需要对
  • 抑制 nginx 访问被拒绝错误日志

    我在 nginx 中设置了一些规则来拒绝 IP 访问 这很有效 但对于来自被拒绝 IP 的每个请求 都会记录以下开头的错误 error 7325 0 5761 access forbidden by rule client 有没有办法抑制这
  • 如何在 sed 中转义方括号[重复]

    这个问题在这里已经有答案了 我正在使用 grep 和 sed 解析遗留的 C 代码 当尝试替换方括号时 发生了一些奇怪的事情 以下代码替换方括号效果很好 echo xyx xzx xyx sed s g 结果是 xyx xzx xyx 当我
  • 删除匹配前的一个单词和一个单词

    匹配之前的一个单词可以是一组任何符号 例如 D E F 我有一个正则表达式 s w s XXX 输入示例 This is KKK M D D xXx PPP输出示例 This is KKK PPP 所以我需要删除 XXX 之前的 1 个单词
  • 如何在 jQuery 中将标题转换为 URL slug?

    我正在 CodeIgniter 中开发一个应用程序 我试图在表单上创建一个字段来动态生成URL slug 我想做的是删除标点符号 将其转换为小写 然后用连字符替换空格 例如 Shane s Rib Shack 将变成 shanes rib
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • RegularExpressionValidator.ValidationExpression 强制长度为 10 或 12 个符号

    RegularExpressionValidator ValidationExpression d 10 仅表示数字 最多 10 位 RegularExpressionValidator ValidationExpression d 10
  • git 匹配多个单词的标签

    我们可以得到最后一个 git 标签 它以一个单词 例如 TEST 开头 如下所示 git describe tag dirty match TEST 我想知道如何获得最后一个以 word1 开头的标签orword2 例如测试OR跑步 我尝试
  • 字符串中的注释和注释中的字符串

    我正在尝试使用 Python 和 Regex 计算 C 代码中包含的注释中的字符数 但没有成功 我可以先删除字符串以删除字符串中的注释 但这也会删除注释中的字符串 结果会很糟糕 是否有机会通过使用正则表达式来询问不匹配注释中的字符串 反之亦
  • 从正则表达式对象中提取允许字符串的最大长度

    一旦加载到 C 中 是否可以从正则表达式模式中提取允许的字符串的最大长度Regex object 如果我有一个正则表达式字符串定义为 A Z0 9 0 20 我可以使用字符串操作来获取最大允许长度20 但是 有没有一种方法可以更轻松地实现这
  • 如何从字符串中删除所有数字?

    我想删除字符串 0 9 中的所有数字 我写了这段有效的代码 words preg replace 0 words remove numbers words preg replace 1 words remove numbers words

随机推荐

  • xargs的默认分隔符可以更改吗?

    我想要以下行为 而不必使用选项显式指定它 xargs d n 与大多数命令不同 您不能只使用别名 因为管道无法识别别名 顺便说一句 为什么要这样设计 我也尝试创建自己的 bin xargs脚本 但我认为这并不像在脚本中读取 作为字符串那么简
  • D3 单击更新数据集并重新绘制条形图

    我是 d3 和 javascript 的新手 并且在更新数据集以及重新绘制条形时遇到问题 这是我到目前为止一直在查看的代码 http jsfiddle net TwEhT 2 http jsfiddle net TwEhT 2 我有一个函数
  • python 或 dask 并行生成器?

    是否有可能在Python中 也许使用dask 也许使用多重处理 将生成器 放置 在核心上 然后并行地单步执行生成器并处理结果 它需要特别是生成器 或带有 iter 生成器生成的所有生成元素的列表不适合内存 尤其 有了熊猫 我可以打电话rea
  • CSS margin vh 无法正常工作

    grenze background green height 96vh width 96vh baukasten background white height 86vh width 86vh margin 5vh border 1px s
  • 保持 CurrentCulture 处于异步/等待状态

    我有以下伪代码 string GetData var steps new List
  • 春季安全3.1

    当我尝试使用 Spring Security 的自定义登录表单时 无论我是否输入了正确的凭据 它都会将我返回到 admin login 页面 当我使用空的
  • joomla 将视图添加到另一个视图中

    我使用 joomla MVC 我想构建一个具有不同选项卡的表单 这些选项卡是表单的不同部分 其中包含输入 我需要包含一些与其他表单通用的选项卡 我希望能够从单独的文件或视图加载此常见内容 这样我就没有重复的代码 而且当我需要对表单进行更改时
  • 获取Enum值的名称

    我正在尝试创建一个函数 我们可以在其中获取枚举值的名称值 例如 Get Enum ValueName DayOfWeek 0 这将返回 Sunday 但我的代码不起作用 它说类型未定义 Private Function Get Enum V
  • Powershell 脚本可以记录已扫描的文件并在下次运行时忽略它们?

    我正在尝试编写一个脚本 该脚本将递归扫描目录 带有 Error 扩展名的本地文件 然后通过电子邮件向一群人发送文件列表 我计划通过 Control M 运行此脚本 并让它每 20 分钟运行一次 我希望脚本记录自上次运行以来已扫描的文件 而不
  • 输入组和表单组之间的区别

    css类之间的使用有什么区别input group and form group在引导程序中 输入组是扩展的表单控件 使用输入组 您可以轻松地将文本或按钮添加到基于文本的输入中 例如 您可以根据需要添加 符号 作为 Twitter 用户名或
  • 将符合 ISO 8601 的字符串转换为 java.util.Date

    我正在尝试转换ISO 8601 http en wikipedia org wiki ISO 8601格式化字符串为java util Date 我找到了模式yyyy MM dd T HH mm ssZ如果与区域设置一起使用 则符合 ISO
  • 无法有趣地计算 R 中光栅堆栈上的像素级回归

    我正在处理栅格 我有一个带有 7n 层的 RasterStack 我想使用下面的公式计算像素级回归 我试图这样做raster calc 但我的功能失败并显示消息 lm fit x y 偏移量 偏移量 奇异 ok 奇异 ok 中的错误 0 非
  • 在单独的线程上运行 Log4Net 附加程序

    目前 我有自己的日志系统 其中日志本质上是一个队列 有一个单独的线程侦听该队列并执行所有实际的写入操作 系统处理大量日志消息 文件在几分钟内很容易超过 10 MB 大小 因此在调用线程中进行实际日志记录是不可行的 如果 log4net 已经
  • 在隐藏标签中播放声音

    我正在尝试在网页上设置声音 我找到了这段代码 这是工作代码 当div是可见的 但我想隐藏起来并工作 在这种情况下它不起作用 因为它被隐藏了style属性 如何让它不可见并同时播放声音 div style display none div 我
  • 在 CSS 中 .a.b 与 .a .b 不同吗?

    在我的 css 文件中是 a b不同于 a b 这是一个简单的问题 但它总是让我烦恼 我尝试过 但我想我会将其发布在这里 以防作为参考有用 在我的 css 文件中 a b 与 a b 不同吗 Yes a b是一个或多个具有两个类的元素 di
  • MySQL 连接器 ODBC odbc.ini“选项”标志值

    首先 感谢您花时间和精力阅读这个问题 我试图更好地理解 odbc ini 文件 在 Unix Linux 系统上 的 Option 属性中指定的值是如何确定的 在 MySQL 文档中搜索 Option 标志可以采用的值之后 我不确定如何得出
  • 基于标准 PHP 查询字符串的路由

    如您所知 Zend Framework v1 10 使用基于斜杠分隔的参数的路由 例如 server controllerName actionName param1 value1 param2 value2 问题是 如何强制 Zend F
  • Angular 5 - 复制到剪贴板

    我正在尝试实现一个图标 单击该图标会将变量保存到用户的剪贴板 我目前已经尝试了几个库 但没有一个能够做到这一点 如何在 Angular 5 中正确地将变量复制到用户的剪贴板 解决方案一 复制任何文本 HTML
  • 使用 PHP 动态创建对象,无需变量赋值

    我只是好奇在 PHP 中是否可以动态创建对象 我以为我以前见过它完成的 当然 我可以将它分配给一个变量 但只是想知道这是否可能 new className gt someMethod 当然 这会引发语法错误 所以显然它不是那样做的 如果可能
  • 关于如何在 Nginx 位置块部分使用正则表达式的指南?

    Nginx 正则表达式位置语法 正则表达式可以与 Nginx 位置块部分一起使用 这是通过 PCRE 引擎实现的 由于没有完整记录 该功能到底支持什么 Nginx 位置 Nginx 位置块部分有一个搜索顺序 一个修饰符 一个隐式匹配类型以及