본문 바로가기

취미, 관심/NAS, Server

[Apache] 아파치 .htaccess에서 www 붙이기, 제거하기(rewrite, redirect)

매번 찾아보는 내용이라 메모겸 작성합니다.

리디렉트, 리다이렉트 용도로도 많이 사용하는 아파치의 rewrite 모듈 에제입니다.

<IfModule mod_rewrite.c>
RewriteEngine On

# 강제로 HTTPS 로 넘김
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 여러 도메인을 한 곳으로
RewriteCond %{HTTP_HOST} ^(example\.com|www\.example\.co\.kr|example\.co\.kr) [NC]
RewriteRule (.*) https://www.example.com/$1 [L,R=301,NC]

# 브라우저에 강제로 www 붙이기
RewriteCond %{HTTP_HOST} ^example\.net [NC]
RewriteRule ^(.*)$ https://www.example.net/$1 [L,R=301,NC]

# 2차도메인을 전부 제거
RewriteCond %{HTTP_HOST} ^([A-Za-z0-9_]+)\.example\.com [NC]
RewriteRule ^(.*)& http://example.com/$1 [L,R]

# www만 제거
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)& http://example.com/$1 [L,R]
</IfModule>

필요한 부분만 사용하시면 되겠습니다.

 

웹서버로 들어온 모든 요청에 대해서 www를 붙이게도 가능하나, 이렇게 하게 되면 여러 서비스를 구동하며 서브도메인을 쓰게 되는 경우에 문제가 생기게 됩니다.

 

abc.example.com 을 사용중인데 www.abc.example.com  이 생기게 되겠죠.

반대로 2차도메인을 모두 제거하는 경우 역시 별로 사용할 일은 없을 것 같네요.

 

단순한 호스팅의 경우 cname을 해당 호스팅 서버를 바라보게 해도 상관 없겠지만, 세션이나 캐시를 사용하게 되는 경우 별도의 도메인으로 인식하기 때문에, 모든 요청을 처음부터 한곳으로 넘겨주는게 좋다고 합니다.