Localização da Nginx "não igual a" regex

Como é que eu estabeleço uma condição location em Nginx que responde a qualquer coisa que não seja igual aos locais listados?

tentei:

location !~/(dir1|file2\.php) {
   rewrite ^/(.*) http://example.com/$1 permanent;
}
Mas não despoleta o redireccionamento. Ele simplesmente lida com o URI solicitado usando as regras no resto da configuração do servidor.

Author: lalit, 2013-04-30

3 answers

De acordo com documentação nginx

Não existe sintaxe para não corresponder a uma expressão regular. Em vez disso, corresponder à expressão regular do alvo e atribuir um bloco vazio, depois usar a localização / para corresponder a qualquer outra coisa

Para que pudesses definir algo como ...
location ~ (dir1|file2\.php) { 
    # empty
}

location / {
    rewrite ^/(.*) http://example.com/$1 permanent; 
}
 59
Author: Ring Ø, 2013-04-30 15:54:52
Estava à procura do mesmo. e encontrei esta solução.

Usar uma afirmação regex negativa:

location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) { 
.... # your stuff 
} 

Fonte Expressões Regulares anuladas na localização

 35
Author: AMB, 2016-09-17 17:08:28

Suponha que você tem dois locais que dizem, location1 e location2, você pode tentar seguir a configuração do bloco de localização para resolver o seu problema.

 location ~ ^/(location1|location2) {
      rewrite (.*) http://example.com/$1 permanent; 
 }

Também o problema que está a enfrentar pode ser devido à sequência de vários blocos de localização na sua configuração. Por favor, verifique, no caso de qualquer um dos blocos de localização que vem antes disso, atende o pedido.

 -1
Author: lalit, 2013-04-30 16:01:00