Ich habe einige Zeit damit verbracht, die Antwort zu finden, bevor ich diese Frage geschrieben habe:
Ich habe mehrere location
Blö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 server
Abschnitt 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 location
Abgleichen 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.