Как в map сделать отрицание в аргументе?

Есть такая конструкция

map $request_method $cache_hit {
  "!~*post" 1;
  "~*!^post" 2;
  default 0;
}


Всегда выдает 0. Мне необходимо написать так, что если метод не POST (GET, HEAD), то выдавать не 0.
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@dodo512
Мне необходимо написать так, что если метод не POST (GET, HEAD), то выдавать не 0.

Т.е. если метод POST, то выдать 0. Иначе выдать 1.
map $request_method $cache_hit {
  "~*post" 0;
  default 1;
}


В $request_method строка всегда в верхнем регистре, так что регулярка не нужна.
map $request_method $cache_hit {
  POST    0;
  default 1;
}


Как выяснилось, исходная задача заключалась в переводе на map таких условий:
set $cache_hit 1;

  # POST requests and urls with a query string should always go to PHP.
  if ($request_method = POST) {
    set $cache_hit 0;
  }

  if ($query_string != "") {
    set $cache_hit 0;
  }
   
  # Don't cache uris containing the following segments.
  if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
    set $cache_hit 0;
  }
   
  # Don't use the cache for logged-in users or recent commenters.
  if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
    set $cache_hit 0;
  }

На map это можно сделать так:
map $query_string $check_query_string {
  ""       0;
  default  1;
}

map $request_uri $check_request_uri {
  "~*(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)"  1;
  default  0;
}

map $http_cookie  $check_cookie {
  "~*comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in"  1;
  default  0;
}


map "$request_method:$check_query_string:$check_request_uri:$check_cookie"  $cache_hit {
  "~^POST"    0;
  "~1"        0;
  default     1;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы