Назад | Перейти на главную страницу

Как использовать переменную в регулярном выражении в nginx?

Я потратил некоторое время, пытаясь найти ответ, прежде чем писать этот вопрос:

У меня есть несколько 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.