2013-04-30 13 views
29

Come si imposta una condizione location in Nginx che risponde a qualcosa che non è uguale alle posizioni elencate?Nginx posizione "non uguale a" regex

ho provato:

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

Ma non attiva il reindirizzamento. Gestisce semplicemente l'URI richiesto utilizzando le regole nel resto della configurazione del server.

+0

io non capisco. Ad esempio, l'utente va a '/ aabbcc' e dove lo stai reindirizzando? –

+0

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

+0

anche questo può essere applicato alla direttiva di posizione 'posizione ~ ^/(?! (Dir1 | file2 \ .php)) {} ' – pengemizt

risposta

52

Secondo nginx documentation

non v'è alcuna sintassi per non corrispondenti a un'espressione regolare. Invece, abbinare il bersaglio espressione regolare e assegnare un blocco vuoto, quindi utilizzare posizione/per abbinare qualsiasi altra cosa

Così si potrebbe definire qualcosa come

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

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

Vale la pena notare: avevo bisogno di questo per reindirizzare in modo condizionale un nome host e aveva un po 'più' posizione vicino al reindirizzamento. Il reindirizzamento non funzionava. Risulta che ho dovuto aggiungere una direttiva 'break;' come per https://stackoverflow.com/a/14049884 –

-1

Supponiamo di avere due sedi dire, location1 e location2 , puoi provare a seguire la configurazione del blocco di posizione per risolvere il tuo problema.

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

anche il problema si sta affrontando potrebbe essere a causa della sequenza di molteplici blocco posizione nella configurazione. Si prega di verificare, Nel caso in cui uno qualsiasi del blocco di posizione che viene prima di questo, serve la richiesta.

22

stavo cercando lo stesso. e ho trovato questa soluzione.

Usa negativo regex affermazione:

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

Fonte Negated Regular Expressions in location

+0

Questo funziona bene. Esempio: posizione ~ (/ konference (?!/20)) catch/konference,/konference/images/ NOT catch/konference/2015,/konferece/2015/images testato su Nginx 1.10.2 –