IT-개발,DB

[apache] HTTP/HTTPS 리다이렉트(Redirect/Rewrite) 하는 방법

SB리치퍼슨 2020. 11. 1. 14:35

[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) 하는 방법|작성자 하나자바

반응형