웹서버/Apache

[정보] Apache rewrite 모듈

투칼론 2017. 9. 3. 21:06
반응형

1. mod_rewrite란?

mod_rewrite는 apache module의 한 종류로 서버 Request를 정해진 Rule에 의해서 다른 URL or File로 보내는 모듈이다. 즉 호출된 URI를 특정 규칙에 의해 변경하여 호출해준다


2. mod_rewrite 모듈 설치하기


1) 아파치 소스 컴파일 시에 --enable-rewrite 옵션을 추가해야 한다.

    예시) $ ./configure --prefix=/usr/local/apache --enable-rewrite

2) 기존 사용 중인 아파치에 추가로 mod_rewrite 모듈을 설치해야 한다.

    예시) $ /usr/local/apache/bin/apxs -aic modules/mappers/mod_rewrite.c 


1)또는 2)를 통해 mod_rewrite 모듈을 설치하면, httpd.conf 파일에 아래와 같은 모듈을 로딩하는 설정을 확인할 수 있다.

<httpd.conf> 파일

 LoadModule rewrite_module     modules/mod_rewrite.so 


3. 설정 범위

httpd.conf(전역 설정),  Virtual Host 영역 (해당 가상호스트에만 영향),  Directory (해당 디렉터리만 영향).htaccess 등에 설정할 수 있다. 즉 RewriteRule 의 사용 범위는 httpd.conf 에 사용하면 전역적으로 반영되며, <VirtualHost>나 <Directory>, <Location> 에 사용할 경우 해당 범위에만 효과를 미친다.


4. 지시자

1) Rewrite 엔진 설정하기


RewriteEngine  On|Off

 

Rewriteing 엔진 사용 여부 설정. 디폴트는 Off로 설정되어 있으며 On 으로 설정하면 Rewritng 엔진이 활성화 된다.


2) Rewrite 디버깅하기


RewriteLog          파일위치

RewriteLogLevel   Level

 

Rewrite 엔진의 로그 파일 위치를 설정한다. Rewrite 규칙들에 대한 디버깅할 때 임시적으로 사용하기를 권장한다. RewriteLog 지시자는 RewriteLogLevel 지시자와 함께 사용하고, 로그레벨은 0~9 까지 가능하고, 0은 로그를 남기지 않고, 9가 가장 상세하게 로그를 남긴다.


3) Rewrite 규칙 설정하기


RewriteCond  TestString  CondPattern  [Flag]

RewriteRule   Pattern  Substitution   [Flag]


RewriteCond 지시자는 RewriteRule 과 함께 사용되는 규칙으로 RewriteCond 다음에 오는 RewriteRule은 RewrieteCond 에서 설정한 패턴과 일치해야지만 RewriteRule들을 실행한다. RewriteCond는 조건을 지정하고, RewriteRule은 실질적인 Rewrite 규칙들을 적용하는 지시자이다.


Pattern은 Perl 정규표현식을 사용하므로 정규식을 이해해야 쉽게 적용할 수 있다.


5. 정규표현식 기초

주요 정규식을 표현하는 문자는 아래와 같다.
 
.  : 하나의 문자
? : 0개 이상의 한문자
* : 0개 이상의 문자 또는 문자열
+ : 1개 이상의 문자 또는 문자열
(chars) : (, ) 안의 문자또는 문자열의 그룹. 이 문자그룹은 Substitution(return URL)에서 $N 의 변수로 활용할수 있음
^ : 문자열의 첫문(열)을 지정
$ : 문자열의 끝 문자(열)을 지정
(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거 (예:(, ), [, ] . 등)
{n} : 정확히 n번 반복
{n,} : n번 이상 반복
{n,m} : n 이상 m 이하 반복
[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정
예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T


6. 예시

1) 도메인명 변경 예시 (www.yikim.or.kr을 www.yikim.co.kr로 변경)

RewriteCond %{HTTP_HOST} www.yikim.or.kr
RewriteRule ^(.*)$ http://www.yikim.co.kr%{REQUEST_URI} [L,R=301]


2) HTTPS에서 HTTP로 redirect 하는 예시

# Redirect HTTPS to HTTP
RewriteCond %{HTTP:X-Forwarded-Proto} =https
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]



* Flag 관련 상세 내용 참조

https://httpd.apache.org/docs/current/rewrite/flags.html