Nginx는 모든 기존 도메인 하위 도메인을 새로운 도메인으로 리디렉션합니다


10

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

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

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

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

답변:


22

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.


완전한. 나는 반환 접근법을 사용했지만 여전히 정규 표현식 부분이라고 명명했습니다. 훨씬 이해하기 쉽습니다.
ranisalt

하위 도메인 (www)없이 리디렉션하려면 어떻게해야합니까? 같은 : sub1.ex.to> sub1.new.in 및 ex.to> www.new.in?
R. Canser Yanbakan 2016 년

1
'\ w'는 도메인 이름에있을 수있는 특정 문자 (예 : '-')와 일치 하지 않습니다 . 위의 정규식 때문에 리디렉션 test-sub.doma.in.domai.in!
Wolfgang

사용 [\ w \ - \ _] + \ 대신 w +가 하위 도메인에 대한 - 그들과 _
사자 드 라프

무엇 않습니다 ~정규식에서 처음에 무엇입니까? 그것은 ^정규식에서 전에 나타나기 때문에 만들어지지 않습니다 .
hobbes3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.