2013-04-30 13 views
29

Jak ustawić warunek location w Nginx, który reaguje na wszystko, co nie jest równe wymienionym lokalizacjom?Lokalizacja Nginx "nie równa się" regex

Próbowałem:

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

Ale to nie powoduje przekierowanie. Po prostu obsługuje żądany identyfikator URI, korzystając z reguł w pozostałej konfiguracji serwera.

+0

ja nie rozumiem. Na przykład użytkownik przechodzi do '/ aabbcc' i gdzie zamierzasz go przekierować? –

+0

Zobacz http://stackoverflow.com/questions/16159108/nginx-url-rewrite-using-negative-regex – sibidiba

+0

to również można zastosować do dyrektywy lokalizacji 'location ~ ^/(?! (Dir1 | file2 \ .php)) {} ' – pengemizt

Odpowiedz

52

Według nginx documentation

nie ma składnia nie pasuje do wyrażenia regularnego. Zamiast odpowiadać docelowej wyrażenia regularnego i przypisać pusty blok, a następnie użyć lokalizację/pasujące do niczego innego

Tak można zdefiniować coś jak

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

location/{ 
    rewrite ^/(.*) http://example.com/$1 permanent; 
} 
+0

Warto zauważyć: Potrzebowałem tego, aby warunkowo przekierować nazwę hosta i miałem więcej' lokalizacji 'obok przekierowania. Przekierowanie nie działa. Okazuje się, że musiałem dodać dyrektywę 'break;' jak na https://stackoverflow.com/a/14049884 –

-1

Załóżmy, że masz dwie lokalizacje powiedzieć, location1 i location2 możesz wypróbować następujące konfiguracje bloków lokalizacji, aby rozwiązać problem.

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

także problem stoją może być ze względu na sekwencji wielokrotnego bloku lokalizacji w danej konfiguracji. Proszę sprawdzić, na wypadek gdyby którykolwiek z bloków lokalizacji, który się przed tym stanie, zasili żądanie.

22

Szukałem tego samego. i znalazłem to rozwiązanie.

Wykorzystanie ujemny regex twierdzenie:

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

Źródło Negated Regular Expressions in location

+0

To działa dobrze. Przykład: lokalizacja ~ (/ konference (?!/20)) catch/konference,/konference/images/ NOT catch/konference/2015,/konferece/2015/images testowany na Nginx 1.10.2 –