WEB/APACHE

31. Rewrite / Redirect

by coldplayer83 2026. 10. 28.
728x90
반응형
구분 Redirect Rewrite
처리 방식 클라이언트(브라우저) 중심 변하지 않음(기존 URL 유지)
주소창 변화 변함 (새로운 URL로 바뀜) 변하지 않음(기존 URL 유지)
요청 횟수 총 2회(1차 요청 -> 300번대 응답 -> 2차 재요청) 총 1회(서버 내부에서 조용히 처리)
상태 코드 301, 302 등 HTTP 상태 코드 반환 일반적인 콘텐츠 응답(200 등)
주요 목적 아예 다른 페이지/도메인으로 이동 안내 복잡한 내부 경로를 깔끔하게 숨겨서 제공

 

Rewrite Options)

RewriteEngine On|Off mod_rewrite 사용여부 지정(default off)
RewriteBase 기본 경로 설정
RewriteRule 실제로 치환되는 조건
RewriteCond 문자열의 패턴 조건 비교. 상황별로 조건을 확인하고 조건이 맞을 경우 처리를 하게 함
RewriteFlag 패턴이 일치할 경우 취할 동작 지정
DocumentRoot 웹 소스 파일이 위치한 경로
ServerName 호스트를 제외한 도메인 주소 ex) dummy-host.example.com
ServerAlias 호스트를 포함한 도메인 주소 ex) www.dummy-host.example.com
ErrorLog 접근시 발생하는 에러로그
CustomLog 에러로그를 제외한 로그가 위치할 경로
RewriteLog 로그를 남길 파일을 지정
RewriteLogLevel 로그 레벨을 지정하며 숫자로 지정 숫자가 클수록 로그에 남기는 내용이 많아짐.
9가 최대, 안정적 환경에서는 0 권장


RewriteCond

# 문법) RewriteCond TestString 패턴 [Flags]
ex) RewriteCond %{HTTP_HOST} !^$

# HTTP 헤더에 HOST가 정의되어있지 않으면 다음 URL로 이동할 것
RewriteCond %{HTTP_HOST} !^$
RewriteRule (.*) http://192.168.56.1:7002

 

RewriteRule

# 문법) RewriteRule 패턴 타겟url [Flag,Flag...]
ex) RewriteRule (.*) http://192.168.56.1:7002 [R,L]

# 패턴 : 정규식 사용 가능하며 일치시킬 패턴을 지정
# 타겟 url : 전환할 url을 적어주며 여기에는 패턴에서 일치한 내용 사용 가능
# Flag : 처리할 동작으로 끝에 [] 로 감싸서 작성하고 , 를 구분자로하여 여러 개 지정 가능

# 브라우저가 요청한 리소스의 확장자가 exe 또는 msi와 같은 실행 파일일 경우 403 응답 전송
RewriteRule \.(exe|msi) - [F]

# 클라이언트가 요청한 파일이 이미지 파일인 경우 로그를 남기지 않음
RewriteRule \.(jpe?g)|gif|png)$ - [env=dontlog:1]

 

RewriteFlag

플래그 목적 주요 용도 사용 예시
[E] Env 조건이 맞을 경우 특정 환경 변수를 설정 또는 해제 [E]
[L] Last rule 현재 규칙 처리 중지 [R=301,L] [F] [G]
[END] Full stop 모든 재작성 처리 중지 (.htaccess 파일에 재입력 금지) [R=301,END]
[R=301] Redirect 영구 리다이렉트 [R=301,L]
[R=302] Redirect 임시 리다이렉트 [R=302,L]
[P] Proxy 대상에 대한 reverse proxy (mod_proxy 필요) [P,QSA]
[F] Forbidden 접근 거부, HTTP 403 반환 [F,L]
[G] Gone 리소스가 영구적으로 사라졌음을 표시, HTTP 410 반환 [G,L]
[NC] NoCase 대소문자 구분 없이 매칭 [NC,L]

 

 

Rewrite, Redirect 설정 예시)

1. 지정 ip의 접속을 제외한 모든 접속을 특정 페이지로 보내기

# ip가 10.21.55.66이 아닐 경우 abc.co.kr로 rewrite
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^10.21.55.66$
RewriteRule ^(.*)$ abc.co.kr [L]

# 특정 ip 대역의 접속을 허용하고 나머지는 redirect
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^10\.21\.55\.
RewriteRule ^(.*)$ https://abc.co.kr/ [R=302,L]

# 여러 ip 대역을 허용하고 나머지는 redirect
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^(10\.21\.55\.|192\.168\.101\.)
RewriteRule ^(.*)$ https://abc.co.kr/ [R=302,L]

 

# ip 대역별 설정 예시
# 14.0.11.x	
!^14\.0\.11\.

# 14.0.x.x	
!^14\.0\.

# 14.x.x.x	
!^14\.

 

2. 특정 uri로 접속하지 않으면 다른 도메인으로 redirect

# /fo uri로 접속하지 않으면 main 페이지로 redirect
ServerName test.co.kr

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/fo/
RewriteRule ^ https://test.co.kr/main.jsp [R=302,L]

 

3. Host 헤더가 test.co.kr이 아니면(IP 접근 포함) 정식 도메인으로 redirect

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?test\.co\.kr$ [NC]
RewriteRule ^/(.*)$ https://test.co.kr/$1 [R=301,L]

# 도메인이 여러개일 경우
RewriteCond %{HTTP_HOST} !^test\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^tes1t\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^tes2t\.example\.com$ [NC]

 

4. Host 헤더가 test.co.kr인 경우만 접속 허용, 나머지 도메인(ex. app.co.kr)으로 접속은 거부

(dns 서버 와일드카드 도메인인 경우 사용 예시)

<VirtualHost *:80>
    ServerName test.co.kr

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^test\.co\.kr$ [NC]
    RewriteRule ^ - [F]
</VirtualHost>

 

5. http -> https redirect

RewriteEngine On
RewriteCond %{HTTP_HOST} !^/$
RewriteRule ^/(.*)$ https://url/$1 [R,L]
# url 부분 변경

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

RewriteEngine On
RewriteCond %{SERVER_PORT} ^80
RewriteRule ^/(.*)$ https://url:443/$1 [R, L]
# url 부분 변경

RewriteEngine On
RewriteCond %{HTTP_HOST} !^/$
RewriteRule (.*) https://scmdev.medi-master.co.kr:443/$1 [R,L]

RewriteEngine On
RewriteCond %{SERVER_PORT} ^8000$
RewriteRule ^/(.*)$ https://%{SERVER_NAME}:8443/$1 [R,L]

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI}

 

표현식)

표현식 의미 예시
%{HTTP_HOST} 클라이언트가 HTTP 요청에 보낸 호스트명 www.example.com:8080
%{REQUEST_URI} 요청 URI의 경로 부분 /board/list.do
%{QUERY_STRING} URL의 쿼리 문자열 page=2&id=10
%{REQUEST_METHOD} HTTP 요청 메서드 GET, POST
%{HTTPS} HTTPS 사용 여부 on, off
%{SERVER_NAME} Apache가 인식하는 서버명 www.example.com
${변수명} Apache 설정 문맥에 따라 환경 변수 또는 mod_rewrite의 매핑 결과 등을 참조 사용 위치에 따라 다름

 

 

 

728x90
반응형

'WEB > APACHE' 카테고리의 다른 글

30. Apache Method 제한  (0) 2026.10.06
29. [JBCS] Service Pack Upgrade - Archive  (0) 2026.07.13
28. HTTP/2  (0) 2026.07.01
27. Apache SameSite 설정  (0) 2026.06.08
26. SSL 인증서 파일 포맷 종류  (0) 2026.04.22

TOP

Designed by 티스토리