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 のようにすべてのパラメータが削除されることです。2 番目の 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;
  }
  ...
}

関連情報