Nginx comprueba si existen parámetros y, de ser así, solo permite valores específicos

Nginx comprueba si existen parámetros y, de ser así, solo permite valores específicos

Parece que no puedo encontrar una manera de limitar algunas consultas. Ahora mismo tengo esto

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

Esto hace exactamente lo que quiero, el problema es si la URL tiene más de un parámetro fox ex. /somefile.html?page=2&arg=file elimina TODOS los parámetros. Supongo que es por el segundo si.

¿Cómo puedo verificar las URL que tienen múltiples variables y eliminarlas todas solo si la variable de la página no es igual a 2, 14 o 24?

Respuesta1

Supongo que necesitas algo como esto (usando map):

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

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

información relacionada