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 구조를 가집니다.
-
%{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을 각각 별도로 생성해야 합니다.