Apache rewrite 사용 방법 | |||
| |||
이번강좌에서는 Apache의 URLRewrite 모듈을 사용하기 위한 컴파일,설치와httpd.conf의 설정방법 그리고 활용방법에 대해 알아보겠습니다.
Apache 다운로드 : http://www.apache.org Rewrite 모듈을 쓰기위한Apache 컴파일 옵션은 --enable-rewrite 입니다. Configure 실행시에 --enable-rewrite 만 추가하시면 Apache에서 rewrite 모듈을 사용할 있게 됩니다. [root@superuser root]# ./cofigureprefix=/usr/local/apache2 --enable-rewrite [root@superuser root]# make [root@superuser root]# make install
1. Rewrite 를 적용할 수 있는 범위 Rewrite 설정은 Server Config, Virtual Host,Directory, .htaccess 에 설정할 수 있습니다. 즉 Apache 서버 전체에 Global 설정과특정 가상호스트에만 적용하도록 할수 있고 특정 디렉토리에만 적용시킬수도 있습니다.
2. Rewrite 모듈 지시자 RewriteEngine설정문법 : RewriteEngine On|Off Rewriteing 엔진을 사용할지 여부를 설정합니다. 기본설정은 당연히 Off로 되어 있으며 RewriteEngine On 으로 설정하지 않는 이상 Rewritng 엔진을활성화 시키지 않습니다.
현재 Apache에서 실행중인 모든RewriteRule을 비활성화 시킬 때 RewriteRule 라인을 주석처리 하기보다 RewriteEngin Off 로 설정하는 것이 더 간편하고 올바른방법입니다.
RewreteLog설정문법 : RewriteLog FILE-PATH RewriteLog 지시자는Rewrite 엔진의 로그를 그록할 파일을 지정합니다. RewriteLog 지시자는 반드시RewriteLogLevel 지시자와 함께 사용하여야 됩니다.
RewriteLogLevel설정문법 : RewriteLogLevel Level RewriteLogLevel 지시자는 RewriteLog 지시자로 설정한 로그파일에 기록할 로그들에 대해 얼마나 자세한 내용을 로그로 남길것인가에대해 설정하는 지시자입니다. 기록할 로그 Level 은 0 ~ 9까지 사용할 수 있으며0은 로그를 기록하지 않겠다는 의미입니다. Level 숫자가 높을수록 자세한 로그를 기록합니다
RewriteCond설정문법 : RewriteCond TestStirngCondPattern RewriteCond 지시자는RewriteRule 과 함께 사용되는 규칙으로 RewriteCond 다음에 오는 RewriteRule은 RewrieteCond 에서 설정한 패턴과 일치해야지만 RewriteRule들을 실행한다.
RewriteRule설정문법 : RewriteRule PatternSubstitution Rewrite 모듈의 실질적인Rewrite 규칙들을 적용하는 지시자입니다. Pattern(Input URL) 을 Subtitution(Return URL)로 변경하기 위한 모든 규칙들은 이 지시자를 사용해서 설정해야 됩니다. Pattern(Input URL) 에는 Perl 정규표현식을 사용할수 있기 때문에 Input URL 의 규칙을유연하게 적용할 수 있습니다. 이 강좌에서는 기초적인 정규표현식 사용방법만 다루고 정규표현식에 대해자세히 알고 싶으신 분은 정규표현식에 대한 강좌나 인터넷 문서를 참고하시기 바랍니다.
정규표현식 기초 . : 다수의한문자 ? : 0개이상의 한문자 * : 0개이상의 문자 또는 문자열 + : 1개이상의 문자 또는 문자열 (chars) : (,) 안의 문자또는 문자열을 그룹으로 묶습니다. 이 문자그룹은 Substitution(return URL)에서 $N 의 변수로 활용할수있습니니다. ^ : 문자열의첫문(열)을 지정합니다. $ : 문자열의끝 문자(열)을 지정합니다. (역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:(, ), [, ] . 등) {n} : 정확히 n번 반복 {n,} : n번이상 반복 {n,m} : n 이상 m 이하 반복 [chars] : 문자들의범위 또는 표현할 수 있는 문자들을 설정합니다.
정규표현식 단축표현들 [:alpha:] : 알파벳. [a-zA-Z] 와 같은 표현 [:alnum:] : 알파벳과숫자. [a-zA-Z0-9] 와 같은 표현 [:digit:] : 숫자 [0-9] 와 같은 표현 [:upper:] : 대문자. [A-Z] 와 같은 표현
RewriteRule플래그 forbidden|F : 요청하는 페이지를 403 에러로redirect 시킵니다. RedirectRule 이 적용되고 있는 페이지를 일시적으로사용중단을 시키거나 사용자로 하여금 페이지 접근을 할수 없게 할 때 사용합니다. 예) RewriteRule ^/test/home/blog/html/test.php [F] 사용자가 /test 로 접근할 경우403 에러를 보냅니다. gone|G : 요청하는 페이지를 410 에러로redirect 시킵니다. 410 에러는 페이지가 사라젔거나 존재하지 않는다는 메시지입니다. 이것도 forbidden 과 마찬가지로 RedirectRule 이 적용되던 페이지를 일시적으로 중단시킬 때 유용하게 사용할 수 있습니다. last|L : 이 플래그가 적용되면 뒤에 어떤 룰이 있더라도 이룰 아래의 규칙들은 적용되지 않고 RewriteRule 을 빠져나가게 됩니다. C, Perl, PHP 프로그램에서루프를 빠져나가는 break 와 같은 의미를 가집니다. chain|C : 이 플래그의 결과를 다음 RewriteRule 의 input 값으로 사용합니다. RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+).domain.com(.*)/home/$1/public_html$2 이 룰은 사용자 홈의 도메인을 2차 도메인으로 자동설정해 줄 때 많이쓰는 룰입니다. RewriteRule의 input은 도메인을제외한 URI 를 인식하기 때문에 도메인까지 인식을 시켜서 다음RewriteRule 로 체크를 하기 위해 사용한 것입니다. 즉 http://user_id.domain.com/hello.html이란 요청이 들어오면 /home/user_id/public_html/hello.html 로 redirect 시켜줍니다. 위와 같이 2차 도메인을 이용해 계정 사용자의 홈을 지정하기 위해서는 DNS 세팅이 선행되어야 됩니다.
RwriteRule설정예
1. http://yourdomain.com/user_id -> http://yourdomain.com/home.php?id=user_id
RewriteRule ^/([a-zA-Z0-9])$ /home/user_id/public_html/home.php?id=$1 설명 : 도메인(http://yourdomain.com) 뒤에 오는 영문숫자로된 문자열을지정하면서 그룹으로 묶었습니다. 이렇게 그룹으로 설정된 문자열Pattern 은 Substitution(return URL) 에서 $1 이라는 변수로 받아 사용하게 됩니다. 즉 http://yourdomain.com/superuser라는 페이지 요청이 들어오면 실제로는 http://yourdomain.com/home.php?id=superuser라는 페이지로 redirect 시켜줍니다. 블로그나카페(동호회) 사이트에서 블로그 사용자의 ID 로 개인 블로그 주소를 부여할 때 http://blog.com/user_id 로 부여해 주지만 실제 실행되는파일은 이와 같이 redirect 시켜주는 경우가 많습니다.
2. http://yourdomain.com/daum -> http://www.daum.net RewriteRule ^/daum$ -> http://www.daum.net 설명 : http://yourdomain.com/daum라는 페이지 요청이 들어오면 도메인이 다른 http://www.daum.net이라는 페이지로 redirect 시켜줍니다.
RewriteOptions설정문법 : RewriteOptions Options 현재 사용할 수 있는 option 은 MaxRedirects=number 를 사용할 수 있으며 설정된 number값에도달하게 되면 500 Internal Server Error 를 남기고 RewriteRule을 종료합니다. 잘못된 RewriteRule에 의한 무한 루프를 방지하기 위한 목적으로 사용되는데 시스템이 이유없이 다운된다거나 할때 이 옵션과 Log 기록을 참고하여 디버깅 및 시스템 다운을 방지할 수 있습니다. 이 지사자는 Apache 2.0.45 이상에서 사용할 수 있습니다.
3. 실제 적용예 가상호스트 www.superuser.co.kr에 대해 Rewrite Rule을 적용한 예입니다. 이부분은 실제 운영되는 블로그 사이트를 위해 RewriteRule 을 적용한 예입니다. <VirtualHost 211.206.201.xxx> DocumentRoot/home/blog/html ServerNameblog.xxx.ac.kr # 여기까지는 일반적인 가상호스트 설정입니다. RewriteEngine on # RewriteRule을 사용하기 위해 On 으로 설정합니다.
RewriteLog/home/blog/rewrite_log_admin3.log RewriteLogLevel 9 # Rewrite 실행중 Log를 남기기 위해 로그파일과 로그레벨을 지정했습니다.
RewriteRule^/tb/([a-zA-Z0-9]+)/([0-9]+)$/home/blog/html/blog/trackback.php?id=$1&post_no=$2 # 위설정은 블로그에 등록된 포스트의 트랙백 주소를 부여하기 위해 설정한RewriteRule 로써 Pattern에 두개의 그룹이 존재하고 return URL에 순서대로 각 그룹을 $1 과 $2 로 받아 GET 변수로 치환한것입니다.
RewriteRule^/xml/([a-zA-Z0-9]+)$ /home/blog/html/blog/rss_feed.php?id=$1 # 각블로그별 RSS 주소를 실제 파일로 지정한것입니다.
RewriteCond%{REQUEST_URI} !^/admin$ RewriteRule^/([a-zA-Z0-9]+)$ /home/blog/html/blog/main.php?id=$1 # 먼저 RewriteCond 로 실제 존재하는 admin 이라는 디렉토리를 이어지는 RewriteRule에서 제외시키고http://domain.com/user_id로의 요청을 모두 /home/blog/html/blog/main.php?id=user_id로 redirect 시키는 룰입니다.
RewriteRule^/([a-zA-Z0-9]+)/([0-9]+)$ /home/blog/html/blog/main.php?id=$1&post_no=$2 # /user_id/1345 로 요청하는 페이지를/home/blog/html/blog/main.php?id=user_id&post_no=1345 로 redirect 시키는 룰입니다.
</VirtualHost>
4. 마치면서 위에서 언급한 RewriteRule 뿐만 아니라 여러가지 상황에서 RewriteRule을잘 활용한다면 아주 유용하게 웹페이지를 컨트롤 할수 있습니다. RewriteRule 을 세팅하기 이전에반드시 정규표헌식에 대해 어느정도 공부한후 적용해 보실 것을 권합니다. Tags: rewrite | |||
| |||
| |||
로그인을 하시면 댓글을 등록 할 수 있습니다. |
OTHER POSTS IN THE SAME CATEGORY WindowsXP 부팅시 부팅 로고 안나오게 하는 방법 |