본문 바로가기

mod_rewrite 와 Virtual User Hosts

MintState 2008년 12월 4일 오후 10:25 조회 13835

mod_rewrite 와 Virtual User Hosts

URL: http://kltp.kldp.org/stories.php?story=01/10/05/8670238
---------------------------------------------------------------------------
제목: mod_rewrite 와 Virtual User Hosts
분류: 아파치
글쓴이: 이운억 <woonuk_at_kldp.org>

mod_rewrite 와 Virtual User Hosts
=================================

원하는 결과는 "http://www.domain.com/~userid" 를 사용치 않고
"http://userid.domain.com" 으로 서비스할 목적입니다.

잘 언급된 문서가 있었던 것으로 생각했는데, 필요해서 찾으려고 하니 힘들더군요 -_-;
생각난 참에 간단히 정리해서 올립니다.

간단히 3단계로 나눌수 있습니다.

1. 네임서버 설정 
2. mod_rewrite 모듈 탑재 
3. httpd.conf 에 rewrite 관련 설정

 

1. 네임서버 설정
----------------
  해당하는 zone 파일에서 호스트 이름에 "*" 문자를 사용합니다.

  * IN A 111.2.333.4 

 

2. mod_rewrite 모듈 탑재
------------------------
  a) 아파치의 모듈들이 설치된 디렉토리에 mod_rewrite.so 가 존재할 경우.
     c) 로 건너 띄면 됩니다 ^^;

  b) 아파치의 모듈들이 설치된 디렉토리에 mod_rewrite.so 가 없는 경우.
     apache 를 다시 컴파일 합니다.

     env CFLAGS="-DEAPI" \ 
     ./configure \ 
     --prefix=/etc/httpd \ 
     --enable-module=so \ 
     --enable-shared=max \ 
     --enable-module=rewrite \ 
     --enable-shared=rewrite 

     make 
     make install 

 

  c) httpd.conf 에서 다음을 확인합니다.

  LoadModule rewrite_module libexec/mod_rewrite.so 
  AddModule mod_rewrite.c 

 

3. httpd.conf 에 rewrite 관련 설정
----------------------------------

    <VirtualHost *> 
    ServerAdmin admin_at_domain.com 
    DocumentRoot /home/httpd/html 
    ServerName www.domain.com 
    ServerAlias domain.com *.domain.com 
    ErrorLog logs/domain.com-error_log 
    CustomLog logs/domain.com-access_log common 


    ### Virtual User Hosts 


    RewriteEngine on 


    RewriteCond %{HTTP_HOST} !^www\.domain\.com$ 
    RewriteCond %{HTTP_HOST} !^domain\.com$ 
    RewriteCond %{HTTP_HOST} ^[^.]+\.domain\.com$ 
    RewriteRule ^(.+) %{HTTP_HOST}$1 [C] 
    RewriteRule ^([^.]+)\.domain\.com(.*) /home/$1/html$2 
    </VirtualHost>

-----------------------------------------------------------
-----------------------------------------------------------
제가 사용하는 조금 다른 아파치 셋업 방법입니다.
제 경우는 예제를 그대로 적용하기 어려운게
사용자들이 그룹별로 홈 디렉토리가 다릅니다.
그래서 일괄적으로 /home/$1/ 을 사용할 수 없었습니다.

<VirtualHost *> 
ServerName foobar.net 
ServerAlias *.foobar.net 
# 헤더에 Vary 라인이 있으면 IE 5의 버그(?)로 MIME 타입을 
# 제대로 인식하지 못하는 경우가 있었습니다. 
# (페이지 등록정보를 보면 알 수 없는 타입이라 나오더군요.) 
SetEnv force-no-vary 

RewriteEngine on 
# 기존 유저들을 배려하기 위한 
# ~userid ->userid.foobar.net 으로 전송 
RedirectMatch permanent ^/~([^/]+)(.*)$ http://$1.foobar.net$2 

# 아래 코드는 Rewrite에 미숙하여 틀린 부분이 있을수도 있습니다 
# 예외 정의 (www, domain only의 경우 무시하도록) 
RewriteCond %{HTTP_HOST} !^www\.foobar\.net$ 
RewriteCond %{HTTP_HOST} !^foobar\.net$ 
RewriteCond %{REQUEST_URI} !^/~(.+)$ 

# Match rule (id.foobar.net 으로 접속하면 실제 사용자 계정으로 연결시키는 부분) 
RewriteCond %{HTTP_HOST} ^([^.]+)\.foobar\.net$ 
# /~%1/ 을 쓰는 이유는 사용자가 /user1/usera, /user2/userb 등 
# 일정한 홈 디렉토리를 가지지 않기 때문입니다. 
# /~(id)/ 를 사용하면 자동으로 홈 디렉토리로 찾아갑니다. 
# %1은 바로 위에서 사용된 RewriteCond 의 매치입니다. 
# RewriteRule 을 1회 줄일 수 있지요. 
# (현재 아파치 1.3.19 사용중) 
RewriteRule ^(.+) /~%1/public_html$1 [E=VHOST:%{HTTP_HOST},L] 
# 로그 
CustomLog /path/to/access_log "%{VHOST}e %h %l %u %t \"%r\" %>s %b" 
</VirtualHost> 
공유 X Facebook LINE QR 코드

댓글 0개

첫 댓글을 남겨보세요.