@alexjc
вебмастер

Почему не работает map в nginx?

Вот такая конструкция:
map '$request_method $query_string $http_cookie $request_uri' $cache_uri {
    'POST ~* ~* ~*' null-cache;
    '~* ~*(.+) ~* ~*' null-cache;
    '~* ~* ~*(comment_author|wordpress_[a-f0-9]+) ~*' null-cache;
    '~* ~* ~* ~*(/wp-admin/|/xmlrpc.php)' null-cache;
    default $request_uri;
}


Не срабатывает map никак, если в условии несколько переменных. Всегда выбирается default. Что не так в этой конструкции?
  • Вопрос задан
  • 276 просмотров
Пригласить эксперта
Ответы на вопрос 3
Lynn
@Lynn
nginx, js, css
Если вы хотите регулярку, то тильда должна быть одна в начале строки
Ответ написан
Комментировать
Думаю Алексей Виноградов хочет сделать красивый конфиг nginx для работы WP Super Cache без горы if, как во многих статьях типа этой, что похвально, т.к. If is Evil

Но судя по всему в map у nginx для нескольких значений регулярка не работает, поэтому ни так ~* ни так ~(.*) и ни так ~^(.*)$ работать не будет.

Но я бы позвал сюда эксперта по nginx, чтобы он авторитетно либо подтвердил мою догадку, либо опроверг.
Ответ написан
Комментировать
@alexjc Автор вопроса
вебмастер
да, хочу для WP Super Cache. Попробовал одну тильду в начале строки. Но тогда похоже все 4 условия отрабатываются как регулярное выражение только к первой переменной. При этом первое условие в моей конструкции не срабатывает (метод GET а не POST), а второе условие срабатывает всегда. Похоже в map и правда регулярки не работают при нескольких переменных, что весьма прискорбно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы