web-dev-qa-db-fra.com

Nginx location "différent de" regex

Comment définir une condition location dans Nginx qui répond à tout ce qui ne correspond pas aux emplacements répertoriés?

J'ai essayé:

location !~/(dir1|file2\.php) {
   rewrite ^/(.*) http://example.com/$1 permanent;
}

Mais cela ne déclenche pas la redirection. Il gère simplement l'URI demandé en utilisant les règles du reste de la configuration du serveur.

43
Christiaan

Selon nginx documentation

il n'y a pas de syntaxe pour ne pas faire correspondre une expression régulière. Faites plutôt correspondre l'expression régulière cible et assignez un bloc vide, puis utilisez location/pour faire correspondre tout autre élément.

Pour que vous puissiez définir quelque chose comme

location ~ (dir1|file2\.php) { 
    # empty
}

location / {
    rewrite ^/(.*) http://example.com/$1 permanent; 
}
68
Ring Ø

je cherchais le même. et trouvé cette solution.

Utilisez une assertion de regex négative:

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

Source expressions régulières négatives dans l'emplacement

Explication de Regex:

Si l'URL ne correspond à aucun des chemins suivants

example.com/favicon.ico
example.com/resources
example.com/robots.txt

Ensuite, il ira à l'intérieur de ce bloc d'emplacement et le traitera.

45
AMB