Подтвердить что ты не робот

Как заставить nginx прекратить обработку других правил и выполнить определенное местоположение?

У меня есть этот конфиг, который работает как положено в пустом определении server { }

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

Но когда я перенесу это в значительно большее определение сервера (которое используется для многосайтовой конфигурации WordPress), оно перестанет работать, и WordPress ответит на него (что, очевидно, не было моей целью).

Я пытался поставить в начале или в конце блока сервера, но это не изменило его.

Как я могу заставить Nginx использовать это место?

4b9b3361

Ответ 1

Вы, вероятно, ищете break.

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

Из документации HttpRewriteModule:

last - завершает обработку текущих директив перезаписи и перезапускает процесс (включая переписывание) с поиском совпадения по URI из всех доступных местоположений.

break - завершает обработку текущих директив перезаписи, и обработка без перезаписи продолжается только в пределах текущего блока местоположения.

Обратите внимание, что внешние блоки местоположения, last и break по сути одинаковы.

Ответ 2

Блоки местоположения в Nginx являются эксклюзивными. Если вы используете location ^~, тогда другие правила, вероятно, заканчивают заголовки для статических объектов, не будут применяться, если вы не скопируете эти правила как вложенные в один и тот же блок местоположения.

Если вы можете поделиться своей полной конфигурацией, я могу заставить ее работать на вас. Скорее всего, вам нужно использовать вложенные блоки местоположения.