Nginx는 모든 기존 도메인 하위 도메인을 새로운 도메인으로 리디렉션합니다 listen 80; server_name ~^(\w+)\.olddomain\.com$;

도메인이 매우 길어서 더 짧고 친근한 도메인으로 변경하기로 결정했습니다. 그러나 하위 도메인이 많기 때문에 (실제로 하위 도메인 와일드 카드가 있음) 도메인 부분 만 변경하면서 하위 도메인을 유지하려고했습니다. 그래서 나는 다음 규칙을 만들었습니다.

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;

  rewrite ^ $scheme://$1.doma.in$request_uri? permanent;
}

이 스 니펫이 문제를 해결 한 다른 많은 질문을 읽었습니다. 그러나 나와 함께 Nginx는 .domain.in하위 도메인없이 항상로 리디렉션합니다 . 내가 무엇을 놓치고 있습니까? 정규식을 정규식으로 테스트했으며 예제가 제대로 작동하면 Nginx가 리디렉션 할 수없는 것 같습니다.



답변

nginx 0.8.25로 명명 된 캡처를 server_name에서 사용할 수 있습니다. 당신은 그들을 사용해야합니다.

여기서 하위 도메인은이라는 변수에 저장됩니다 $sub. 그런 다음 rewrite지시문 에서 재사용 할 수 있습니다 .

server {
  listen 80;
  server_name ~^(?<sub>\w+)\.olddomain\.com$;
  rewrite ^ $scheme://$sub.doma.in$request_uri? permanent;
}

또는 실제 정규식을 유지 $1하고 return지시문에 사용할 수 있습니다 .

server {
  listen 80;
  server_name ~^(\w+)\.olddomain\.com$;
  return 301 $scheme://$1.doma.in$request_uri;
}

마지막으로, return지시문은 리디렉션에 가장 적합한 방법입니다. 리디렉션을 사용하여 함정에 빠질 수 있습니다 rewrite.