Nginx проверяет, существуют ли параметры, и если да, то разрешает только определенные значения

Nginx проверяет, существуют ли параметры, и если да, то разрешает только определенные значения

Я не могу найти способ ограничить некоторые запросы. Сейчас у меня это

if ($args ~* "(.*&)?page="){
   set $wrongP W;
}
if ($args !~* (.*&)?page=(2|12|24)$){
   set $wrongP "${wrongP}R";
}
if ($wrongP = WR){
   rewrite ^(.*)$ $uri? permanent;
}

Это делает именно то, что я хочу, проблема в том, что если url имеет более одного параметра, например /somefile.html?page=2&arg=file, он удаляет ВСЕ параметры. Я предполагаю, что это из-за второго if.

Как проверить URL-адреса, имеющие несколько переменных, и удалить их все, только если переменная страницы не равна 2, 14 или 24?

решение1

Я думаю, вам нужно что-то вроде этого (используя map):

map $arg_page $need_redirect {
  default "1";
  ""      "0";
  "2"     "0";
  "14"    "0";
  "24"    "0";
}

server {
  ...
  if ($need_redirect) {
    rewrite ^ $uri? permanent;
  }
  ...
}

Связанный контент