사이트 내 전체검색
apache Rewrite Rule 설정시 주의점(.htaccess 가 작동하지 않을때)
로빈아빠
https://cmd.kr/server/649 URL이 복사되었습니다.

본문

apache 를 웹서버로 사용한다면,  rewrite rule 을 사용하고 있거나, 사용해봤을 것이다.
블로그 툴로 많이 쓰는 테터툴즈도 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>
    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>
이때 Rewrite rule 을 Virtual host 항목에 직접 써 넣을 수 있다.
그러나, 보통 다음에 이야기할 .htaccess 파일을 사용한다.(태터툴즈도 이 방법을 사용)

3. .htaccess 에 rule 설정

설정하려는 도메인의 DocumentRoot 에 .htaccess 파일을 만들고 rule 을 설정한다.
(위의 예에서는 /user/yourdomain.co.kr/.htaccess 가 되겠다)

흔히 사용하는 rule 하나를 예를 들면..
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} /demo/([a-z0-9_-]+)$
RewriteRule demo/(.*) /demo/index.php?key=$1 [R,L]
yourdomain.co.kr/demo/keyname  형식으로 접속하면,
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>
자세한 옵션은 다음을 참조한다 external.png.

혹시 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 external.png
http://httpd.apache.org/docs/2.0/misc/rewriteguide.html external.png

댓글목록

로빈아빠님의 댓글

profile_image 로빈아빠 작성일

예제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>

1,139 (4/23P)

Search

Copyright © Cmd 명령어 3.12.161.151