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 它会删除所有参数。我猜这是因为第二个 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;
  }
  ...
}

相关内容