[apache] HTTP/HTTPS 리다이렉트(Redirect/Rewrite) 하는 방법
[apache] HTTP/HTTPS 리다이렉트(Redirect/Rewrite) 하는 방법
1. 개요
Apache에서 HTTP/HTTPS 프로토콜 별로 리다이렉트/라라이트 하는 방법.
2. 활용
RewriteCond %{HTTPS} on/off 설정을 이용하여 프로토콜 별로 처리할 수 있다.
Rewrite를 추가하는 부분에서 SSL 인증서를 사용하고 있다면 [P] 옵션을 사용하기 때문에 (P=Proxy)
SSLProxyEngine On 설정을 추가해줘야 한다.
Proxy를 사용하지 않아도 될 경우에는 [P,R,L] -> [R=301,L] 사용
ㅁ HTTP를 HTTPS로 리다이렉트
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}/$1 [P,R,L] </IfModule> |
ㅁ HTTPS를 HTTP로 리다이렉트
SSLProxyEngine On => SSL 인증서를 이용하고 있다면 넣어줘야 한다.
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} on RewriteRule (.*) http://%{HTTP_HOST}/$1 [P,R,L] </IfModule> |
ㅁ HTTP/HTTPS를 고려하여, 받은 URL 그대로 리다이렉트.
SSLProxyEngine On => SSL 인증서를 이용하고 있다면 넣어줘야 한다.
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} on RewriteRule .* https://%{HTTP_HOST}/$1 [P,R,L] RewriteCond %{HTTPS} off RewriteRule (.*) http://%{HTTP_HOST}/$1 [P,R,L] </IfModule> |
ㅁ
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%/$1 [L,R=301] |
1) RewriteCond %{HTTPS} off
- HTTP로 접속 된 경우,
2) RewriteRule의 [R,L]
[L]은 정의의 마지막 줄(Last)을 의미함. 이 줄 아래의 RewriteRule은 모두 무시. 가장 마지막 행에 씀.
[L]을 쓰지 않아도 동작은 함.
[R]은 리다이렉트 실행함.
=============================================================================[apache] http -> https로 리다이렉트 처리
ㅁ httpd-vhosts.conf 수정
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] |
1. RewriteEngine On
- RewriteEngine 활성화
2. RewriteCond %{HTTPS} off (or !=on)
- 조건 : HTTPS 가 아니면
3. RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
- R=301은 301 리디렉션이라는 뜻이고, L은 마지막이라는 뜻입니다.
L은 반드시 필요한건 아니지만 R=301은 반드시 해줘야 합니다. 저게 빠지면 302 리디렉션이라고 감지합니다.
(301은 영구적인 이동, 302는 일시적인 이동)
ㅁ 유사한 처리 방식
Redirect permanent / https://hanajava.net
|
참고 : https://httpd.apache.org/docs/2.4/ko/mod/mod_alias.html
(https://%{HTTP_HOST}/$1 이랑 https://%{HTTP_HOST}%{REQUEST_URI} 둘 다 잘 작동함)
https://%{HTTP_HOST}/$1 (O - 올바른 설정)
https://%{HTTP_HOST}$1 (X - 잘못된 방식) : 이렇게 설정하면 최상위 도메인까지만 되고 그 이하 페이지는 리다이렉트가 안됨.
4. 그 외
- https://(도메인)\.(도메인)/$1 [R=301,L] 이런 방식이 있는데, 이것도 잘 작동합니다.
(.*)이 아니라 ^(.*)$라고 되어 있는것도 많은데 별 차이는 없다고 하네요
Redirect permanent / https://example.com
ㅁ NGINX 설정 방법
# Redirect non-https traffic to https if ($scheme != "https") { return 301 https://$host$request_uri; } # |
[출처] [apache] HTTP/HTTPS 리다이렉트(Redirect/Rewrite) 하는 방법|작성자 하나자바