在寫這個問題之前,我花了一些時間試圖找到答案:
我的 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。