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 |