리다이렉트(Redirect)란?
특정 주소에 진입 시 다른 주소로 경로를 변경하여 접속시켜주는 웹서버의 기능을 말하며 리다이렉트 방법은 301과 302 리다이렉트로 나뉘게 됩니다.
301 Redirect
영구적인 리다이렉트를 말하며 SEO에서 301은 페이지 또는 도메인이 Target 페이지로 완전한 이관을 했다고 인식하게 됩니다. http -> https 로 리다이렉트 시 주로 사용하게 됩니다.
서버단에서 처리되는 작업이기 때문에 Web서버의 설정을 변경하게 되어 웹어플리케이션에 진입 전 서버상에서 처리하여 경로를 재설정 해줍니다.
302 Redirect
일시적인 방법으로 웹 어플리케이션 또는 자바 스크립트 상에서의 redirect 처리를 의미하며 페이지의 오류 또는 권한 등의 처리 시에 사용됩니다.
클라이언트 단에서 처리되기 때문에 서버에서 응답받아 웹어플리케이션에 진입하여 302를 확인 후 다시 서버로 갔다가 최종 웹페이지까지 연결되는 방식으로 302 리다이렉트인 경우 서버를 최소 2회 거치게 되어있습니다. 리다이렉트가 많은 경우 서버에 많은 호출이 있게되어 성능상 좋지 않습니다.
HTTPS로 강제 Redirect방법
지난 포스팅에서 SSL 적용을 통한 HTTPS 설정을 완료했었습니다. http://도 접속이 되고 https:// 에도 접속이 되는 상황이 되었을 텐데요 진입 경로를 https:// 하나로 단일화 시켜보도록 하겠습니다.
힘들게 ssl 적용해서 놓았는데 사람들이 http://로 우회한다면 좋지 않겠지요? 이러한 이유로 https에 강제적으로 접속하게 설정을 변경해 보겠습니다.
아마존의 lightsail을 통해 설명드리지만 타 Apache 설정과 동일하거나 유사하므로 경로만 본인 환경에 맞게 따라하시면 됩니다.
먼저 lightsail의 콘솔을 통해 터미널을 연결합니다.
터미널에서 아래 명령어로 편집기에 진입합니다.
vi /home/bitnami/apps/wordpress/conf/htaccess.conf
이 htaccess.conf 파일은 클라이언트가 웹서버에 접근 시 권한, 리다이렉트 처리 등 디렉토리 별 권한 설정 파일입니다.
파일 제일 아래에 아래의 명령어를 넣고 저장합니다.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^ https://본인도메인%{REQUEST_URI} [L,R=301]
</IfModule>
Code language: HTML, XML (xml)
한 줄씩 보자면
- IFModule mod_rewrite.c : 아파치의 rewrite 모듈이 설치, 포함된 경우에만 동작
- RewriteEngine on : Rewrite를 동작시킨다.
- RewriteCond %{HTTPS} != on [NC] : HTTPS가 아닌 경우
- RewriteRule ^ https://본인도메인%{REQUEST_URI} [R-301,L] : https://로 도메인 리다이렉트 적용한다.
위와 같이 적용 시 http://로 접속한 경우 https://로 강제 변경하여 처리시켜주며 최종적으로 브라우저에서 확인하였을때도 https://로 변경되어 있을 겁니다.
추가적인 옵션으로 www 접속시 루트 도메인으로 연결하는 리다이렉트도 적용해 보겠습니다.
www를 사용하시는 분들은 Skip하시고 위의 설정만 저장하신 후 Apache 재가동 하시면 됩니다.
sudo /opt/bitnami/ctlscript.sh restart
WWW 접속 시 루트 도메인으로 Redirect 방법
서비스를 하나 올렸는데 굳이 www도메인이 필요한가? 에 대한 의문이 들었습니다.
www는 World Wide Web 이라는 의미로 인터넷이 처음 보급되던 시기에는 필수적으로 사용하였으나 최근에는 루트도메인의 보조역할로 사용되는 서브도메인의 역할을 하고 있습니다.
예를 들면 example.com이 루트 도메인이면 www.example.com으로 접속 시 example.com의 역할을 대신해 주는 것이지요.
근데 왜 굳이 www를 없에느냐? www도 특별하긴 하지만 서브도메인의 개념이고 SEO 상으로도 www가 없는 편을 권장하고 있습니다. 그리하여 블루스코더도 www를 과감히 제거해보기로 합니다.
제거하는 방법은 일단 www에 접속이 가능해야 하니 DNS A 레코더에 www를 추가해 줍니다.
www A레코드를 추가하여 www.bluescoder.com으로 진입 시 웹서버를 통과하도록 하여 웹서버의 설정에서 www를 제거하는 Redirect를 수행하게 됩니다.
DNS가 반영되었다면 https Redirect 처리한 부분으로 돌아가서 설정파일에 작성한 내용을 약간 변경해 봅니다.
vi /home/bitnami/apps/wordpress/conf/htaccess.conf
https Redirect 설정 시 추가한 내용을 아래와 같이 변경해 줍니다.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://본인루트도메인%{REQUEST_URI} [L,R=301]
</IfModule>
Code language: HTML, XML (xml)
변경 내용은 아래와 같습니다. [OR] 추가와 HTTP_HOST관련 한 줄 추가
- RewriteCond %{HTTPS} !=on [OR] : [OR] 이 추가됩니다.
- RewriteCond %{HTTP_HOST} ^www\. [NC] : 한 줄이 추가됩니다.
HTTPS로 접속하지 않거나 또는 www로 시작하는 경우 https://루트도메인 으로 강제 리다이렉트 시켜주는 Rule 입니다.
위와 같이 설정 시 아래의 Case가 모두 리다이렉트 처리됩니다.
- http://www.example.com -> https://example.com
- https://www.example.com -> https://example.com
- http://example.com ->https://example.com
설정 완료 시 편집기를 저장하시고 Apache 재가동 해주시면 https의 루트도메인으로 사용 가능한 사이트가 완성됩니다.
아파치 재가동 명령어
sudo /opt/bitnami/ctlscript.sh restart