본문
블로그 툴로 많이 쓰는 테터툴즈도 rewrite rule 을 사용하고 있다.
요근래에는 Fancy URL 이라고 하여, URL 이 복잡하게 되는 것을 방지하기 위해 많이 쓰이는 편이다.
크게 rewrite rule 이 적용되는 것을 살펴보면,
1. 모듈로딩 ( rewrite 모듈을 apache 가 읽어들이도록 한다.)으로 볼 수 있다.
2. apache 설정 ( virtual host )
3. .htaccess 설정
1. Rewrite 모듈로딩
배포판 마다 apache 설정 파일의 위치가 다르긴 하지만, 다음과 같은 항목을 포함한다.
(ubuntu / debian 계열은 /etc/apache2/mods-enabled 에 설정한다.)
모듈 설정 항목은
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so와 같은 항목이다.
2. apache conf 설정
보통 일반적인 설정이다.(Virtual Host 사용)
<VirtualHost *:80>이때 Rewrite rule 을 Virtual host 항목에 직접 써 넣을 수 있다.
ServerAdmin webmaster@yourdomain.co.kr
DocumentRoot /user/yourdomain.co.kr/
ServerName yourdomain.co.kr
ServerAlias www.yourdomain.co.kr
ErrorLog logs/yourdomain.co.kr-error_log
CustomLog logs/yourdomain.co.kr-access_log combined
</VirtualHost>
그러나, 보통 다음에 이야기할 .htaccess 파일을 사용한다.(태터툴즈도 이 방법을 사용)
3. .htaccess 에 rule 설정
설정하려는 도메인의 DocumentRoot 에 .htaccess 파일을 만들고 rule 을 설정한다.
(위의 예에서는 /user/yourdomain.co.kr/.htaccess 가 되겠다)
흔히 사용하는 rule 하나를 예를 들면..
RewriteEngine Onyourdomain.co.kr/demo/keyname 형식으로 접속하면,
RewriteBase /
RewriteCond %{REQUEST_URI} /demo/([a-z0-9_-]+)$
RewriteRule demo/(.*) /demo/index.php?key=$1 [R,L]
yourdomain.co.kr/demo/index.php?key=keyname 으로 rewrite 해주는 rule 이다.
보통 ProcessFile?key=aaa&key2=bbb 처럼 URL 이 복잡해지는 것을 줄이는 용도로 사용한다.
# 이때 .htaccess 파일을 설정했는데, Rule 이 작동하지 않는 경우
알아 두어야 할 것은 .htaccess 파일을 사용하려면,
AllowOverride 항목이 'None' 이상(?)이어야 한다.(이부분은 확인필요)
이것도 배포판 마다 다를 것이다.
ubuntu 인 경우 <Directory /> 가 AllowOverride none 으로 설정되어 있다.
따라서 .htaccess 를 사용하기 위해서는 위의 Virtual Host 설정탭 사이에 다음처럼 추가한다.
<Directory /user/yourdomain.co.kr/>자세한 옵션은 다음을 참조한다 .
AllowOverride all
</Directory>
혹시 Rewrite Rule 을 설정할때, .htaccess 에 있는 설정이 적용되지 않는다면, 위 부분을 확인해 본다.
<VirVirtualHost> </VirtualHost> 사이에 .htaccess 에 설정된 Rule 을 직접 입력하면 되는데,
.htaccess 로 하는 경우 안된다면 위의 문제일 가능성이 많다.
위 AllowOverride 설정을 맨 상위디렉토리(/user 나 /)에 설정을 해도 되지만,
그런경우 /user/.htaccess /user/otherdomain/.htaccess 등을 모두 찾으려 하기 때문에 속도저하가 있을 수 있다.
꼭 필요한 경우에 해당 위치에만 사용하는 것이 좋을 듯 하다.
# 참조
http://httpd.apache.org/docs/2.0/ko/howto/htaccess.html
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
관련링크
- http://apmusers.com/tt/dbckdghk/93 1037회 연결
댓글목록
로빈아빠님의 댓글
로빈아빠 작성일
예제1) http://g4.miwit.com/bbs/board.php?bo_table=g4_tiptech&wr_id=233
예제2) http://g4.miwit.com/g4_tiptech/233
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)$ /bbs/board.php?bo_table=$1&wr_id=$2
</IfModule>
http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=20648 참고
ErrorDocument 403 arbuild/member_error_url.php
ErrorDocument 404 arbuild/member_error_url.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_]+)$ bbs/board.php?bo_table=$1
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)$ bbs/board.php?bo_table=$1&wr_id=$2
RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/([0-9]+)$ bbs/board.php?bo_table=$1&wr_id=$2&c=$3
</IfModule>