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有多個參數fox ex。 /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;
  }
  ...
}

相關內容