Nginx - 正则表达式 location

我有一个基于正则表达式的 location 规则,大致如下:

location ~ /(abc.*xyz|def.*zxy|ghk.*qwe)/

我能否查看哪部分正则表达式匹配了? 也就是说,如果 url 如下:

/12abc34/

我想知道哪个部分被匹配了:

.*abc.*

有什么方法吗?

我在 AWS 的 Debian VM 上运行了最新版本的带有 lua 模块的 nginx。

------------更新-------------

我在思考使用内部 location,但是它很丑陋:

 location ~ /(abc.*xyz|def.*zxy|ghk.*qwe)/
{
    location ~ /(abc.*xyz){...}
    location ~ /(def.*zxy){...}
...
}

现在我有大约 60 个正则表达式模式。这种方法可行吗?

点赞
用户4862445
用户4862445

你的正则表达式表达式:/(.*abc.*|.*def.*|.*ghk.*)/可以简化为:

location ~ (abc|def|ghk).*/ { ... }

由于任何nginx的URI都以/开头,因此您不需要测试/.*

括号中的正则表达式部分在location块中被_捕获_为$1

因此,在/12abc34/的情况下,变量$1将被设置为abc

2016-11-27 14:21:46