2012-05-22 11 views
11

Ho questa configurazione che funziona come previsto in un server { } definizione vuotaCome rendere nginx necessario per interrompere l'elaborazione di altre regole e servire una posizione specifica?

location ^~ /foo/ { 
    alias /var/www/foo/; 
    } 

Ma quando mi muovo questo in una definizione di server considerevolmente più grande (quello utilizzato per un multi-sito WordPress config), smetterà di funzionare e wordpress risponderà ad esso (che ovviamente non era il mio intento).

Ho provato a mettere all'inizio o alla fine del blocco del server, ma questo non lo ha cambiato.

Come posso forzare nginx a utilizzare questa posizione?

risposta

14

Probabilmente stai cercando break.

location ^~ /foo/ { 
    alias /var/www/foo/; 
    break; 
} 

Dal HttpRewriteModule documentation:

last - completa l'elaborazione di direttive di riscrittura attuali e riavvia il processo (comprese le riscrittura) con la ricerca di una corrispondenza sulla URI da tutte le posizioni disponibili.

break - completa l'elaborazione di direttive riscrittura correnti e elaborazione non riscrittura continua nel blocco posizione corrente soltanto.

Si noti che blocchi di posizione esterna, ultimo e interruzione sono effettivamente lo stesso .

+1

È per le regole di riscrittura e non per le direttive di posizione. – peterh

1

I blocchi di posizione in Nginx sono esclusivi. Se si utilizza location ^~, allora le altre regole probabilmente le intestazioni di scadenza per gli oggetti statici non verranno applicate a meno che non si copino tali regole come nidificate nello stesso blocco di posizione.

Se è possibile condividere la configurazione completa, posso farlo funzionare per voi. Molto probabilmente è necessario utilizzare blocchi di posizione nidificati.

+0

La tua seconda frase è indecifrabile. – peterh

+0

Voglio dire se le intestazioni di scadenza sono elencate in un blocco comune separato, quindi non si applicano a questo blocco che utilizza 'posizione^~' –

Problemi correlati