Wie verwende ich eine Variable in einem regulären Ausdruck in Nginx?

Wie verwende ich eine Variable in einem regulären Ausdruck in Nginx?

Ich habe einige Zeit damit verbracht, die Antwort zu finden, bevor ich diese Frage geschrieben habe:

Ich habe mehrere locationBlöcke in meiner Nginx-Konfigurationsdatei, die so aussehen:

location ~ ^/(doc|img|bla|foo)/metadata/$ { ... }

location ~ ^/(doc|img|bla|foo)/deleted/$ { ... }

location ~ ^/(doc|img|bla|foo)/something/$ { ... }

Daher dachte ich, es wäre eine gute Idee, den wiederholten regulären Ausdruck in eine Variable umzugestalten, die ich im serverAbschnitt festlege (auch weil ich weiß, dass ich sie in Zukunft ergänzen muss), und zwar so:

server {
     set $my_regex doc|img|blah|foo;

     # I also tried this one:
     set $my_regex "doc|img|blah|foo";
     ....
}

Die ich dann in den Standortblöcken wiederverwenden würde:

# 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/$ { ... }

Irgendeine Idee? Danke!

Antwort1

Es besteht keine Möglichkeit, Variablen beim locationAbgleichen zu verwenden.

Wenn du das möchtest, machst du wahrscheinlich etwas falsch. In diesem Fall könntest du es mit Nistplätzen versuchen.

Antwort2

Bitte überprüfen Sie hierzuVerknüpfungwie sie in NGINX sagtenDokumentation

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

Benannte Captures sind eine Funktion von PCRE und haben in verschiedenen Versionen unterschiedliche Syntax. Für die von Ihnen verwendete Syntax benötigen Sie mindestens PCRE 7.0.

verwandte Informationen