it-swarm.com.de

Nginx Position "ungleich" Regex

Wie lege ich in Nginx eine location -Bedingung fest, die auf alles reagiert, was nicht den aufgelisteten Positionen entspricht?

Ich habe es versucht:

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

Die Umleitung wird jedoch nicht ausgelöst. Der angeforderte URI wird einfach anhand der Regeln in der restlichen Serverkonfiguration verarbeitet.

43
Christiaan

Nach nginx documentation

es gibt keine Syntax, um NICHT mit einem regulären Ausdruck übereinzustimmen. Passen Sie stattdessen den regulären Zielausdruck an und weisen Sie einen leeren Block zu. Verwenden Sie dann location /, um eine Übereinstimmung mit anderen Elementen zu erzielen

So könnte man so etwas definieren

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

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

ich habe das Gleiche gesucht. und fand diese Lösung.

Negative Regex-Behauptung verwenden:

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

Quelle Negierte reguläre Ausdrücke an Ort und Stelle

Erklärung von Regex:

Wenn die URL keinem der folgenden Pfade entspricht

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

Dann geht es in diesen Standortblock und verarbeitet ihn.

45
AMB