.htaccess로 특정 페이지만 SSL대응하기

.htaccess로 특정 페이지만 SSL대응하기

특정 페이지만 SSL 대응할 경우, 원래대로라면 SSL 페이지 내 링크를 일일히 변경하는 등의 귀찮은 작업을 해야만 하겠지만, 그렇게 할 수만은 없는 상황이 있다.

그럴 때 .htaccess의 mod_rewrite만으로 어떻게 안될까?

먼저 SSL로 처리하고 싶은 페이지의 디렉터리에 .htaccess를 작성. 아래의 예의 경우 contact.php, contact_2.php, contact_3.php만을 SSL대상으로 지정할 수 있다.

    RewriteEngine on
    RewriteCond %{REQUEST_URI} .*/contact.php$ [OR]
    RewriteCond %{REQUEST_URI} .*/contact_2.php$ [OR]
    RewriteCond %{REQUEST_URI} .*/contact_3.php$
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

    RewriteCond %{REQUEST_URI} !(.*/contact.php$)
    RewriteCond %{REQUEST_URI} !(.*/contact_2.php$)
    RewriteCond %{REQUEST_URI} !(.*/contact_3.php$)
    RewriteCond %{HTTPS} on
    RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

.php에 접속할 경우 자동적으로 https로 리다이렉트되기 때문에 링크의 URL을 수정할 필요가 없게 된다.
단지 이것만으로는 SSL페이지에서 다른 페이지로의 링크를 클릭했을 때, https인 채로 넘어가기 때문에 루트 디렉터리에 .htaccess를 작성해서 이 점을 방지하기 위한 내용을 추가해야 한다.

    RewriteEngine on
    RewriteCond %{SERVER_PORT} ^443$
    RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

https에 접속했을 경우에 강제적으로 http로 리다이렉트 시켜줄 수 있게 된다.

한가지 더 설정이 필요한데, 이러한 내용을 통해 SSL설정된 페이지에 접속해 보면, 이미지 파일이 표시가 안되는 경우가 있다. 일반적으로 이미지만 따로 image라는 폴더에 모아 놓는 경우가 많은데, 이미지에 접속하려고 할 때 루트 디렉터리에 설치된 .htaccess 때문에, https가 http로 강제적으로 변경되어버리기 때문이다. 이미지가 저장된 디렉터리에도 아래의 .htaccess를 작성해 준다.

    RewriteEngine off 

위 한줄로 이미지 파일에 접속했을 때는 mod_rewrite를 무효로 처리한다. 이렇게 하면 https로 접속된 경우 SSL로 이미지를 불러들이고, http로 접속하면 http(원래대로)로 불러들인다.

그 밖에, js, css파일 등의 디렉터리도 마찬가지로 mod_rewrite를 무효화 시켜주는 작업이 필요하다.

이 디렉터리 저 디렉터리에 너무 많이 .htaccess를 작성하는 것도 문제지만, SSL페이지의 링크URL을 전부 https로 수정하는 것, 어느 쪽이 작업이 수월한지 상황에 맞춰 판단하면 되겠다.