728x90
Apache의 mod_rewrite 모듈에서 RewriteCond 지시문은 조건에 따라 RewriteRule이 실행되도록 하는 역할을 합니다.
이때 다양한 변수를 사용할 수 있는데, 각 변수는 서버 환경이나 요청 정보와 관련된 특정 값을 나타냅니다.
자주 사용되는 변수들
1. %{HTTP_USER_AGENT}
- 설명 : 클라이언트의 User-Agent 헤더 값을 나타냅니다.
- 예제 : 특정 브라우저에서만 접근을 허용하거나 차단할 때 사용합니다.
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "MSIE" [NC]
RewriteRule ^ - [F]
인터넷 익스플로러(IE) 사용자 접근을 차단
2. %{HTTP_REFERER}
- 설명: 이전 페이지의 URL을 나타내는 Referer 헤더 값을 나타냅니다.
- 예제: 특정 사이트에서 들어오는 트래픽을 차단할 때 사용합니다.
RewriteEngine On
RewriteCond %{HTTP_REFERER} example\.com [NC]
RewriteRule ^.*$ - [F]
example.com에서 들어오는 사용자 접근을 차단
3. %{REMOTE_ADDR}
- 설명: 클라이언트의 IP 주소를 나타냅니다.
- 예제: 특정 IP 주소의 접근을 허용하거나 차단할 때 사용합니다.
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.100$
RewriteRule ^ - [F]
IP 주소가 192.168.1.100인 사용자의 접근을 차단
4. %{REQUEST_URI}
- 설명: 요청된 URI를 나타냅니다.
- 예제: 특정 패턴의 URI를 재작성할 때 사용합니다.
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^.*$ - [F]
/admin 디렉토리로 들어오는 모든 요청을 차단
5. %{QUERY_STRING}
- 설명: 요청된 URL의 쿼리 문자열을 나타냅니다.
- 예제: 특정 쿼리 문자열이 포함된 요청을 재작성할 때 사용합니다.
RewriteEngine On
RewriteCond %{QUERY_STRING} "id=123"
RewriteRule ^/old-page$ /new-page [L,R=301]
쿼리 문자열에 "id=123"이 포함된 경우, /old-page 요청을 /new-page로 리다이렉트
6. %{HTTPS}
- 설명: 요청이 HTTPS를 통해 이루어졌는지 여부를 나타냅니다.
- 예제: HTTPS 요청인지 확인하고, HTTP로 리다이렉트 할 때 사용합니다.
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
HTTP 요청을 HTTPS로 리다이렉트 (주로 많이 사용)
7. %{REQUEST_METHOD}
- 설명: 요청된 HTTP 메서드(GET, POST 등)를 나타냅니다.
- 예제: 특정 HTTP 메서드에 따라 처리 방식을 다르게 할 때 사용합니다.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^POST$
RewriteRule ^ - [F]
POST Method 요청을 차단
8. %{HTTP_REFERER} + %{REQUEST_URI} 응용
RewriteEngine On
RewriteCond %{HTTP_REFERER} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^.*$ - [F]
example.com에서 들어오는 요청 중 /admin URI로 들어오는 모든 요청을 차단
반응형
mod_rewrite의 모든 변수
변수 | 설명 |
%{HTTP_USER_AGENT} | 클라이언트의 User-Agent 헤더 값 |
%{HTTP_REFERER} | 이전 페이지의 URL을 나타내는 Referer 헤더 값 |
%{HTTP_COOKIE} | 클라이언트의 Cookie 헤더 값 |
%{HTTP_FORWARDED} | 클라이언트의 Forwarded 헤더 값 |
%{HTTP_HOST} | 요청된 Host 헤더 값 |
%{HTTP_PROXY_CONNECTION} | 클라이언트의 Proxy-Connection 헤더 값 |
%{HTTP_ACCEPT} | 클라이언트의 Accept 헤더 값 |
%{REMOTE_ADDR} | 클라이언트의 IP 주소 |
%{REMOTE_HOST} | 클라이언트의 호스트 이름 |
%{REMOTE_PORT} | 클라이언트의 포트 번호 |
%{REMOTE_USER} | 인증된 사용자 이름 |
%{REMOTE_IDENT} | 클라이언트의 식별자 |
%{REQUEST_METHOD} | 요청된 HTTP 메서드 (GET, POST 등) |
%{SCRIPT_FILENAME} | 현재 스크립트의 파일 경로 |
%{REQUEST_URI} | 요청된 URI |
%{REQUEST_FILENAME} | 요청된 파일의 경로 |
%{QUERY_STRING} | 요청된 URL의 쿼리 문자열 |
%{AUTH_TYPE} | 인증 방식 |
%{THE_REQUEST} | 클라이언트의 원본 HTTP 요청 라인 |
%{REQUEST_SCHEME} | 요청된 URL의 스킴 (http, https) |
%{REQUEST_TIME} | 요청이 수신된 시간 (Unix 타임스탬프) |
%{HTTPS} | 요청이 HTTPS를 통해 이루어졌는지 여부 |
%{SERVER_SOFTWARE} | 서버 소프트웨어 식별자 |
%{SERVER_NAME} | 서버의 호스트 이름 |
%{SERVER_ADDR} | 서버의 IP 주소 |
%{SERVER_PORT} | 서버의 포트 번호 |
%{SERVER_PROTOCOL} | 요청된 프로토콜 (HTTP/1.1 등) |
%{DOCUMENT_ROOT} | 문서 루트 디렉토리의 경로 |
%{CONTEXT_PREFIX} | 컨텍스트의 URL 경로 접두사 |
%{CONTEXT_DOCUMENT_ROOT} | 컨텍스트의 문서 루트 경로 |
%{SCRIPT_USER} | 현재 스크립트를 실행 중인 사용자 |
%{SCRIPT_GROUP} | 현재 스크립트를 실행 중인 그룹 |
%{PATH_INFO} | 경로 정보 |
%{PATH_TRANSLATED} | 변환된 경로 정보 |
%{ENV:변수명} | 환경 변수 |
%{TIME_YEAR} | 현재 연도 (4자리) |
%{TIME_MON} | 현재 월 (2자리) |
%{TIME_DAY} | 현재 일 (2자리) |
%{TIME_HOUR} | 현재 시간 (2자리, 24시간 형식) |
%{TIME_MIN} | 현재 분 (2자리) |
%{TIME_SEC} | 현재 초 (2자리) |
%{TIME_WDAY} | 현재 요일 (0-6, 0=일요일) |
%{TIME} | 현재 시간 (비표준 형식) |
%{API_VERSION} | 현재 사용 중인 Apache API 버전 |
%{IS_SUBREQ} | 서브 요청인지 여부 (true/false) |
여러가지 변수들을 활용하여 다양한 상황에 맞는 URL 재작성 규칙을 설정할 수 있습니다.
728x90
반응형
'Server > Web' 카테고리의 다른 글
Web - Apache를 이용한 프록시 패스 설정 가이드 (0) | 2024.05.29 |
---|---|
Web - Apache를 이용한 로드 밸런서 설정 가이드 (0) | 2024.05.28 |
Web - Apache 웹 서버에서 Redirect / Rewrite 방법 (0) | 2024.05.17 |
Web - Apache SSL 인증서 비밀번호 자동입력 / 비밀번호 삭제 (2) | 2023.10.27 |
Windows - Apache Web Server 설치 (4) | 2023.04.18 |