如何在nginx的正規表示式中使用變數?

如何在nginx的正規表示式中使用變數?

在寫這個問題之前,我花了一些時間試圖找到答案:

我的 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

請檢查這裡關聯正如他們在 NGINX 中所說文件

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。

相關內容