Rewriting 조건 정의

RewriteCond는 재작성(rewriting) 조건을 정의하며, 다음과 같은 형식으로 설정합니다. TestString과 CondPattern을 매칭하여 조건이 만족되면 RewriteRule 설정에 따라 해당 패턴을 교체합니다.

RewriteCond <TestString> <CondPattern> [flags]

TestString 설정

TestString에는 다음과 같은 예약어와 일반 문자열을 사용할 수 있습니다.

  • $N (0 <= N <= 9)

    RewriteRule의 Pattern 중 괄호로 묶인 패턴을 참조합니다.

  • %N (1 <= N <= 9)

    RewriteCond의 CondPattern 중 괄호로 묶인 패턴을 참조합니다.

    $N과 %N은 다음과 같은 Regex Back-Reference 구조를 가집니다.

    figure mod rewrite back reference
  • %{SERVER_VARIABLE_NAME}

    CGI에서 사용하는 서버 환경 변수 중 일부와 몇 가지 추가적인 변수를 참조합니다.

    유형 변수

    서버 환경 변수

    %{ENV:variable}: 환경 변수를 참조, %{HTTP:header}: HTTP 요청 헤더를 참조

    HTTP headers

    HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_FORWARDED, HTTP_HOST, HTTP_PROXY_CONNECTION, HTTP_ACCEPT

    connection & request

    REMOTE_ADDR, REMOTE_PORT, REMOTE_METHOD, QUERY_STRING, AUTH_TYPE

    server internals

    DOCUMENT_ROOT, SERVER_NAME, SERVER_ADDR, SERVER_PORT, SERVER_PROTOCOL, SERVER_SOFTWARE

    date and time

    TIME_YEAR, TIME_MON, TIME_DAY, TIME_HOUR, TIME_SEC, TIME_WDAY, TIME

    specials

    THE_REQUEST, REQUEST_URI, HTTPS

    Apache의 mod_rewrite에서 제공하는 변수 중 아래의 변수는 사용할 수 없습니다.

    %{SSL:variable}, %{LA-U:variable}, %{LA-F:variable}, REMOTE_HOST, REMOTE_IDENT, SCRIPT_FILENAME, SCRIPT_USER, SCRIPT_GROUP, SERVER_ADMIN, API_VERSION, REQUEST_FILENAME, IS_SUBREQ

CondPattern 설정

CondPattern은 Perl compatible reqular expression을 사용할 수 있으며, 다음과 같은 추가적인 패턴을 사용할 수 있습니다.

지시자 설명

!Pattern

Pattern에 매칭되지 않는 경우를 지정합니다.

<CondPattern

TestString이 CondPattern보다 사전 순서상 앞에 있을 경우를 매칭합니다.

>CondPattern

TestString이 CondPattern보다 사전 순서상 뒤에 있을 경우를 매칭합니다.

=CondPattern

TestString이 CondPattern과 일치하는 경우를 매칭합니다.

-d

TestString을 path로 간주하여 디렉터리일 경우를 매칭합니다.

-f

TestString을 path로 간주하여 파일일 경우를 매칭합니다.

-s

TestString을 path로 간주하여 파일 사이즈가 0보다 큰 경우를 매칭합니다.

-l

TestString을 path로 간주하여 symbolic link일 경우를 매칭합니다.

-x

TestString을 path로 간주하여 실행 파일일 경우를 매칭합니다.

-F

TestString을 path로 간주하여 서버 설정상 접근이 가능한 경우를 매칭합니다.

-U

TestString을 URL로 간주하여 서버 설정상 접근이 가능한 경우를 매칭합니다.

모든 패턴에는 '!'을 붙여서 반대 의미로 매칭할 수 있습니다.

 

다음은 정규 표현식에서 사용하는 지시자의 설명입니다.

지시자 설명

.

단일 문자와 일치합니다.

+

이전 패턴을 1회 이상 반복합니다.

*

이전 패턴을 0회 이상 반복합니다.

?

이전 패턴을 선택적으로 매칭합니다.

^

이전 패턴을 선택적으로 매칭합니다.

$

문자열의 끝 부분과 일치합니다.

( )

여러 문자를 하나의 그룹으로 묶고, 백레퍼런스에서 사용할 수 있도록 매칭 결과를 캡처합니다.

[ ]

문자 클래스 - 대괄호 안의 문자 중 하나와 일치합니다.

[^ ]

부정 문자 클래스 - 대괄호 안에 나열된 문자가 아닌 모든 문자와 일치합니다.

flags 설정

CondPattern에 [flags]를 사용하여 패턴 매칭 방식을 변경할 수 있습니다.

지시자 설명

nocase|NC

패턴을 매칭할 때 대소문자를 구분하지 않습니다.

ornext|OR

RewriteCond 다음에 또 다른 RewriteCond가 있을 경우 다음 RewriteCond와 logical OR로 조합되도록 설정합니다. 명시적으로 설정하지 않은 경우 항상 AND 조건으로 다음 조건과 조합됩니다.

novary|NV

HTTP Header를 TestString으로 사용할 경우 Vary Header가 응답에 추가되지 않도록 합니다.

다음은 [OR] 플래그를 사용한 예시입니다.

RewriteCond %{HTTP_HOST}  ^host1.*  [OR]
RewriteCond %{HTTP_HOST}  ^host2.*  [OR]
RewriteCond %{HTTP_HOST}  ^host3.*
RewriteRule ...

만약 [OR] 플래그를 사용하지 않는다면 3개의 RewriteCond와 RewriteRule을 각각 별도로 생성해야 합니다.