본문 바로가기
Apache,Tomcat

Apache redirect & rewrite diff (http to https)

by nomore7 2014. 4. 22.


웹 서버를 구성하다보면 페이지를 리다이렉트 해야하는 경우가 있다.


location.href 나 jquery등으로 javascript에서 리다이렉트를 할 수도 있지만,


이런 방법은 다수의 페이지를 수정해야 할 때 너무 손이 많이가고, 보안적으로 취약하다.(페이지가 로딩하는 내용을 확인하는 등)


이 때 사용하기 적합한 아파치 모듈 기능로 mod_rewrite와 mod_alias의 redirect 가 있다.


예를 들면 다음과 같다.

SSL인증서를 설치하고 보안통신을 하고 싶은 사이트가 있다.

http로 사용자가 요청을 하더라도 https 로 사용하도록 리다이렉트 하려한다.


두가지 방법이 있다.



1. mod_alias의 redirect기능


NameVirtualHost *:80

<VirtualHost *:80>

   ServerName www.example.com

   Redirect permanent / https://secure.example.com(https:443포트의 servername 해당서버의 도메인)/

</VirtualHost>



2. mod_rewrite


RewriteEngine On


RewriteCond %{HTTPS} !=on


RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]




둘 다 정상적으로 동작한다.


둘은 사용의 목적에 따라 유용한 경우 다를 수 있다.


mod_alias의 경우를 사용할 경우, 단순히 원하는 특정url을 정해진 어떤 url로 이동한다 라고 했을 때 유용하다.

어떤 경로를 강제로 사용하지 못하게하거나, 위와 같은 경우를 간단히 처리할 때 유용하다.

실질적으로 추가할 라인도 단한 줄에 불과하다.


반면 rewrite를 사용할 경우 좀 더 많은 수정과 정규식을 사용해야 하므로 위 경우에는 첫번째 방식을 추천한다고 한다.



이 상황에서 redirect방식을 추천하는 이유는 단지 포트를 옮기기 위한 작업이므로 복잡한 상황에 대한

대처는 필요하지 않기 때문이다.


하지만 더 복잡한 경우, 정규식을 이용하여 리다이렉션등을 하고 싶을 경우 rewrite모듈을 사용하면 유용하다.

apache를 설치 할때 필요한 유틸인 pcre가 이곳에서 쓰이는 이유이다.



https://wiki.apache.org/httpd/RedirectSSL#Redirect_Request_to_SSL

의 내용을 참조했다.