본문 바로가기
정보 정리

htaccess 파일 수정하여 http를 https로 리다이렉트 + php hsts 설정

by 얘리밍 2022. 5. 11.
320x100
728x90

 

 

.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>

 


 

1) 모든 트래픽에 대해 https 강제 적용하기

 

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

 

2) 특정 도메인에만 https 강제 적용하기

 

RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain1.com [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

(빨간 부분에 https 적용을 제외하고 싶은 도메인 주소 작성)

 

 

3) 특정 폴더만 https 적용하기

 

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(folder1|folder2|folder3) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 
 

<php hsts 적용하기>

 

header.php 에 아래 코드 적용

enableHSTS.php

<?php header("strict-transport-security: max-age=31536000; includeSubDomains; preload"); >

 

disable 시키고 싶을 때, 

disableHSTS.php

<?php header("strict-transport-security: max-age=0;preload"); >

 

* HSTS 옵션

 

1) max-age : hsts 정책을 적용할 기간(초)를 설정

2) includeSubdomains : 도메인(example.com)의 서브 도메인 (*.example.com 등)에도 hsts 설정을 적용

3) preload : 해당 도메인을 hsts 적용 preload list에 추가하도록 함

 

 

 

(참고)

 

preload list

  • HSTS는 HTTPS로 웹 사이트에 접속하기 위해 적어도 한번 웹 서버와 통신을 해야하는데 통신 전에 미리 HTTPS로 접속하도록 목록을 미리 만들어 놓은 것.
  • 브라우저에서 지원하는 기능이며, 브라우저 안에 기본적으로 내장되어 있는 사이트 목록들이 있음
  • 서버가 헤더에 preload값을 내려주면 이 목록에 해당 사이트도 추가 됨.
  • preload에 추가된 사이트는 서버가 HSTS 헤더를 삭제해도 브라우저에는 설정이 유지된다.
  • Chrome의 HSTS preload 리스트는 IE등 타 브라우저에서도 활용하고 있는 것으로 파악 됨
  • preload list에 추가는 신중해야 함

 

HSTS 설정 시 주의 사항

  • 서버측 redirection 처리를 별도로 하지 않았는데 https로 자동 URL이 변경되는 경우가 있다면 HSTS 헤더룰 의심
  • HSTS 헤더가 설정된 https url에 한번이라도 접속하면, HTTP 접속시에도 HTTPS로 접속됨
  • Spring Security에서 디폴트로 HTTPS 요청시에 HSTS 헤더값을 내려주도록 되어있음

 

(http://wiki.gurubee.net/display/SWDEV/HSTS+%28HTTP+Strict+Transport+Security%29)

 

 

 

728x90
반응형