Я потратил некоторое время, пытаясь найти ответ, прежде чем задать этот вопрос:
В моем конфигурационном файле 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 как минимум.