본문 바로가기

Server/Web

Web - Apache mod_rewrite 사용 변수 모음집

728x90

Apache의 mod_rewrite 모듈에서 RewriteCond 지시문은 조건에 따라 RewriteRule이 실행되도록 하는 역할을 합니다.

이때 다양한 변수를 사용할 수 있는데, 각 변수는 서버 환경이나 요청 정보와 관련된 특정 값을 나타냅니다.

Rewrite가 궁금하다면?

 

자주 사용되는 변수들

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
반응형