Я потратил некоторое время, пытаясь найти ответ, прежде чем писать этот вопрос:
У меня есть несколько location
блоки в моем конфигурационном файле nginx, которые выглядят так:
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/$ { ... }
Любая идея? Спасибо!
Нет возможности использовать переменные в location
соответствие.
Если вы этого хотите, вы, вероятно, делаете что-то не так. В этом случае вы можете попробовать места для гнездования.
Пожалуйста, проверьте это ссылка на сайт как сказали в 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.