Passei algum tempo tentando encontrar a resposta antes de escrever esta pergunta:
Eu tenho vários location
blocos em meu arquivo de configuração nginx parecidos com este:
location ~ ^/(doc|img|bla|foo)/metadata/$ { ... }
location ~ ^/(doc|img|bla|foo)/deleted/$ { ... }
location ~ ^/(doc|img|bla|foo)/something/$ { ... }
Então pensei que seria uma boa ideia refatorar a expressão regular repetida em uma variável que defini na server
seção (também porque sei que terei que adicioná-la no futuro), assim:
server {
set $my_regex doc|img|blah|foo;
# I also tried this one:
set $my_regex "doc|img|blah|foo";
....
}
Que eu reutilizaria dentro dos blocos de localização:
# 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/$ { ... }
Qualquer ideia? Obrigado!
Responder1
Não há como usar variáveis na location
correspondência.
Se você quiser, provavelmente está fazendo algo errado. Neste caso você pode tentar locais de aninhamento.
Responder2
Por favor, verifique issolinkcomo eles disseram no NGINXdocumentação
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
As capturas nomeadas são um recurso do PCRE e possuem sintaxe diferente disponível em diferentes versões. Para a sintaxe que você usa? você deve ter pelo menos PCRE 7.0.