쿼리 문자열을 유지하면서 Nginx 와일드카드 하위 도메인 리디렉션

쿼리 문자열을 유지하면서 Nginx 와일드카드 하위 도메인 리디렉션

예를 들어 다음 sub1.example.com으로 리디렉션 하면서 하위 도메인을 URL 끝에 추가하는 동안 와일드카드 하위 도메인을 새 URL로 리디렉션하려고 합니다.www.newdomain.example/categories/sub1

server {
server_name ~^(.*)\.example\.com$ ;
return 301 $scheme://newdomain.example/categories/;
}

?Nginx는 마지막에 차단되지 않기 때문에 기본적으로 이것을 추가한다고 생각합니다.

답변1

또는 다음과 같은 경우에는 악을 사용하지 마십시오.

server {
  server_name ~^(.*)\.example\.com$;
  return 301 $scheme://www.newdomain.example/categories/$1$request_uri;
}

$request_uri에는 이미 쿼리 문자열/매개변수가 포함되어 있으므로 다음을 참조하세요.http://nginx.org/en/docs/http/ngx_http_core_module.html

$request_uri를 사용하고 싶지 않을 때 $is_args $args 쌍에 대해서도 언급하고 싶습니다.

  location = /from {
    return 301 /to$is_args$args;
  }

답변2

server_name예시 보기공식 문서:

server {
  server_name ~^(.*)\.example\.com$;
  if ($query_string) {
    return 301 $scheme://newdomain.example/categories/$1?$query_string;
  }
  return 301 $scheme://newdomain.example/categories/$1;
}

sub1.example.com은 www.newdomain.example/categories/sub1로 리디렉션됩니다.

www.newdomain.example아니면 example.com어느 것이 맞나요?

답변3

http://cat.example.com/post/1?comments=true로 리디렉션하려면 http://example.com/categories/cat/post/1?comments=true다음 구성을 사용할 수 있습니다.

server {
    server_name ~^(.*)\.(example\.com)$;
    return 301 $scheme://$2/categories/$1$request_uri;
}

캡처 그룹과 함께 정규식을 사용합니다.server_name중복을 피하기 위해. 기본적으로 쿼리 문자열은 예제에서 유지되지 않지만 제안된 구성에서는 다음을 사용하여 유지됩니다.$request_uri:

$request_uri
    full original request URI (with arguments) 

관련 정보