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