0

所以我有一个基于正则表达式的位置规则,如下所示:

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

我可以检查正则表达式的哪一部分产生了匹配吗?这意味着如果网址像

/12abc34/

比我想知道它是由

.*abc.*

有办法吗?

我正在 AWS 上的 Debian VM 上运行用 lua-module 编译的最新 nginx。

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

我正在考虑使用内部位置,但它会很难看:

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

现在我有 60 种正则表达式模式。这种方法可以吗?

4

1 回答 1

1

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

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

由于任何nginxURI 都以 开头/,因此您无需测试/.*.

括号内的正则表达式部分被捕获$1location块内。

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

于 2016-11-27T14:21:46.027 回答