Nginx prüft, ob Parameter vorhanden sind und lässt ggf. nur bestimmte Werte zu

Nginx prüft, ob Parameter vorhanden sind und lässt ggf. nur bestimmte Werte zu

Ich kann anscheinend keine Möglichkeit finden, einige Abfragen einzuschränken. Im Moment habe ich dies

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

Das macht genau das, was ich will. Das Problem ist, wenn die URL mehr als einen Parameter hat, z. B. /somefile.html?page=2&arg=file, werden ALLE Parameter entfernt. Ich vermute, es liegt am zweiten if.

Wie prüft man, ob URLs mehrere Variablen haben, und entfernt sie alle nur, wenn die Seitenvariable ungleich 2, 14 oder 24 ist?

Antwort1

Ich vermute, dass Sie so etwas brauchen (mit map):

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

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

verwandte Informationen