htaccess / 문의페이지만 https처리하기(SSL)

htaccess / 문의페이지만 https처리하기(SSL)
새로운 작업을 할 때마다 .htaccess를 써넣어줘야 하는데, 매번 같은 작업을 검색해서 사용하는 바람에, 쓸데없는 시간이 걸려버린다.
그래서 개인적인 기록용으로!!
이번 내용은 폼이 들어간 문의페이지만을 SSL화 하기 위한 내용인데, mod_rewrite를 써서 HTTP와 HTTPS를 자유롭게 왔다 갔다 할 수 있도록 한다. 이 내용 저 내용으로 시행착오를 거쳐 최종적으로 선택된 녀석을 기록해두겠음.
혹시 사용하실 분들이 계시면 그냥 복사해서 자기 환경에 맞게 쓰시면 되겠다.
mod_rewrite은 Apache의 기능이므로 다른 환경에서는 이용 불가능.
RewriteEngine을 사용할 때는 먼저, RewriteEngine on를 첫 줄에 써준 후 RewriteRule을 써내려 감.

.htaccess 기입방법

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  # HTTP로 접속 된 경우,
  RewriteCond %{HTTPS} off
  # 아래의 URL은 항상 https로 리다이렉트
  RewriteCond %{HTTP_HOST} www.example.com
  RewriteCond %{REQUEST_URI} ^/admin/.*$ [OR]
  RewriteCond %{REQUEST_URI} ^/inquiry/.*$ 
  # 단 아래를 제외하고.
  RewriteCond %{REQUEST_URI} !^/assets/.*$
  RewriteCond %{REQUEST_URI} !^.*\.(js|css|gif|jpg|png|ico|php)$
  # https로 리다이렉트
  RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

  # HTTPS로 접속 된 경우,
  RewriteCond %{HTTPS} on
  # 아래의 URL이외는 항상 http로 리다이렉트
  RewriteCond %{HTTP_HOST} www.example.com
  RewriteCond %{REQUEST_URI} !^/admin/.*$
  RewriteCond %{REQUEST_URI} !^/inquiry/.*$
  # 단 아래를 제외하고.
  RewriteCond %{REQUEST_URI} !^/assets/.*$
  RewriteCond %{REQUEST_URI} !^.*\.(js|css|gif|jpg|png|ico|php)$
  # http로 리다이렉트
  RewriteRule ^.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
  • %{HTTP_HOST}로 호스트를 한정시키는 건、개발환경에서 무효화시키기 위해서.
  • css나 이미지 파일을 리다이렉트 시키면 https ON의 페이지에서 암호화되지 않은 콘텐츠를 읽어들여 에러가 생기므로 예외를 써줌.

RewriteRule의 [R,L]은 무엇을 나타내는가

  • [L]은 정의의 마지막 줄(Last)을 의미함. 이 줄 아래의 RewriteRule은 모두 무시. 가장 마지막 행에 씀.
  • [L]을 쓰지 않아도 동작은 함.
  • [R]은 리다이렉트 실행함.