Nginx verifica se existem parâmetros e, em caso afirmativo, permite apenas valores específicos

Nginx verifica se existem parâmetros e, em caso afirmativo, permite apenas valores específicos

Não consigo encontrar uma maneira de limitar algumas consultas. Agora eu tenho isso

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

Isso faz exatamente o que eu quero, o problema é se o URL tiver mais de um parâmetro fox ex. /somefile.html?page=2&arg=file remove TODOS os parâmetros. Suponho que seja por causa do segundo se.

Como verificar URLs que possuem múltiplas variáveis ​​e remover todas elas somente se a variável da página não for igual a 2, 14 ou 24?

Responder1

Eu acho que você precisa de algo assim (usando map):

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

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

informação relacionada