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;
  }
  ...
}

관련 정보