2012-05-22 4 views
11

Ich habe diese Konfiguration, die wie in einer leeren server { } DefinitionWie kann nginx die Verarbeitung anderer Regeln stoppen und einen bestimmten Ort bedienen?

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

Aber wenn ich diese bewegen sich in einem wesentlich größeren Serverdefinition (ein verwendet für eine Wordpress Multi-Site-config) erwartet funktioniert, wird es aufhören zu arbeiten und Wordpress wird darauf antworten (was offensichtlich nicht meine Absicht war).

Ich habe versucht, am Anfang oder Ende des Serverblocks zu setzen, aber das hat es nicht geändert.

Wie kann ich Nginx zwingen, diesen Ort zu verwenden?

Antwort

14

Sie suchen wahrscheinlich nach break.

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

Vom HttpRewriteModule documentation:

last - vervollständigt die Verarbeitung der aktuellen Rewrite-Richtlinien und startet den Prozess (einschließlich Umschreiben) mit der Suche nach einer Übereinstimmung auf der URI von allen verfügbaren Stellen.

break - Abschluss der Verarbeitung der aktuellen Rewrite-Anweisungen und Verarbeitung ohne Schreibvorgang wird nur im aktuellen Standortblock fortgesetzt.

Beachten Sie, dass außerhalb der Standort Blöcke, letzte und Pause sind die gleichen.

+1

Es ist für die Rewrite-Regeln und nicht für die Standort-Richtlinien. – peterh

1

Standortblöcke in Nginx sind exklusiv. Wenn Sie location ^~ verwenden, werden andere Regeln, wahrscheinlich Verfallsüberschriften für statische Objekte, nicht angewendet, es sei denn, Sie kopieren diese Regeln als verschachtelt unter demselben Standortblock.

Wenn Sie Ihre vollständige Konfiguration teilen können, dann kann ich es für Sie arbeiten lassen. Höchstwahrscheinlich müssen Sie geschachtelte Standortblöcke verwenden.

+0

Ihr zweiter Satz ist nicht entzifferbar. – peterh

+0

Ich meine, wenn Verfalls-Header unter einem separaten allgemeinen Block aufgeführt sind, dann werden sie nicht auf diesen Block angewendet, der 'location^~' verwendet –

Verwandte Themen