在写这个问题之前,我花了一些时间试图找到答案:
我的 nginx 配置文件中有几个location
如下所示的块:
location ~ ^/(doc|img|bla|foo)/metadata/$ { ... }
location ~ ^/(doc|img|bla|foo)/deleted/$ { ... }
location ~ ^/(doc|img|bla|foo)/something/$ { ... }
因此,我认为将重复的正则表达式重构为我在该部分中设置的变量是一个好主意server
(也因为我知道将来我必须添加它),如下所示:
server {
set $my_regex doc|img|blah|foo;
# I also tried this one:
set $my_regex "doc|img|blah|foo";
....
}
然后我将在位置块内重复使用它:
# this doesn't have any effect
location ~ ^/($my_regex)/metadata/$ { ... }
# this one neither
location ~ ^/(\$my_regex)/deleted/$ { ... }
# and this one neither
location ~ ^/(${my_regex})/something/$ { ... }
有什么想法吗?谢谢!
答案1
匹配时无法使用变量location
。
如果你想要它,那么你可能做错了。在这种情况下,你可以尝试嵌套位置。
答案2
The PCRE library supports named captures using the following syntax:
?<name> Perl 5.10 compatible syntax, supported since PCRE-7.0
?'name' Perl 5.10 compatible syntax, supported since PCRE-7.0
?P<name> Python compatible syntax, supported since PCRE-4.0
命名捕获是 PCRE 的一个功能,它们在不同版本中有不同的语法。对于您使用的语法?您必须至少拥有 PCRE 7.0。