[MBC파업] 태터툴즈 1.x의 .htaccess 문제
사실 태터툴즈 의 index.php 파일을 삭제해도 태터툴즈는 정상적으로 동작한다. 그 이유는 바로 mod_rewrite 모듈때문이다. 이 모듈은 쉽게 말해서 요청된 URL 을 서버상에서 실시간으로 변경할 수 있는 모듈이다. 태터툴즈의 경우 하위 버전과의 호환성과 동작의 상당수를 이 모듈에 의존한다. 따라서 mod_rewrite 모듈을 지원하지 못하는 서버에는 1.x 버전을 깔 수 없다.
그러면 루트에 index.php 파일이 없어도 정상적으로 동작하는 이유는 무었일까? 조금 이상하게 생각할지 모르지만 그 핵심은 .htaccess 에 있다. .htaccess의 내용을 보면 다음과 같은 내용이 포함되어 있다.
RewriteRule ^$ blog/index.php [E=SURI:1,L]
이 줄 바로 밑에는 다음과 같은 행이 포함되어 있는 것을 알 수 있다.
RewriteRule ^[0-9]+$ blog/item.php [E=SURI:1,L]
이 문장의 의미는 로컬 주소가 하나 이상의 숫자([0-9]+)로 구성되어 있으면 blog/item.php 파일을 호출하라는 의미이다. 즉, 주소가 http://offree.net/454 처럼되어 있으면 blog/item.php 파일이 호출된다는 의미이다. 태터툴즈 0.9 버전에서는 RSS 피드로서 /index.xml 파일을 사용했고, 1.x에서는 /rss를 사용한다. 그러나 어떤 주소를 입력해도 동일한 RSS 피드가 생성된다. 그 이유는 다음의 두 문장때문이다.
RewriteRule ^index\.xml$ blog/rss/index.php [E=SURI:1,L] RewriteRule ^(.+)$ blog//index.php [E=SURI:1,L]
첫번째 문장은 요청한 로컬 주소가 index.xml 파일인 경우 blog/rss/index.php를 호출하는 문장이며, 두번째 문장은 요청한 로컬 주소가 임의의 문자로 구성되어 있으면 blog/임의의 문자/index.php 파일을 실행하는 문장이다. 만약 예를 들어 rss를 요청한 경우 blog/rss/index.php를 호출하게된다. 따라서 주소에 index.xml를 입력하든 rss를 입력하던 동일한 결과를 얻게된다.
조금 혼란스러워 보이지만 이 모든 것은 Perl의 정규식 을 사용한 것(PHP 의 경우 PREG 함수)이다. Perl의 정규식에대해 알고 싶다면 필자의 CGI 강좌 중 문자열 일치와 대치와 변환을 참고하면 된다. 아울러 아파치의 mod_rewrite에 알고 싶다면 Apache mod_rewrite 와 바로 적용할 수 있는 예제로 가득찬 URL Rewriting Guide 를 참조하기 바란다.

물론 오류 메시지처럼 경로가 틀려서 발생한 문제일 수도 있다. 그러나 필자의 경우 블로그 주소가 http://offree.net/이므로 트래픽 주소는 http://offree.net/throttle-me가 맞다. 사실 오류는 주소가 틀려서 발생한 것이 아니라 태터툴즈에서 .htaccess 파일을 생성하면서 트래픽에대한 부분을 고려하지 않았기때문에 발생한 현상이다. 이러한 현상이 발생하게된 원인은 다음 문장이다.
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ / [L]이 문장은 요청한 파일 이름이 디렉토리이면 자동적으로 파일 이름에 /를 붙여주는 문장이다. /throttle-me는 서버의 설정에따라 다소 달라지겠지만 링크된 디렉토리로 간주된다. 따라서 /throttle-me를 요청하면 주소는 자동적으로 /throttle-me/ 로 변경된다. 실제 이 주소를 입력해보면 알 수 있지만 이 주소를 입력하는 경우 서버에 따라 404 File not found 메시지가 나타난다. 따라서 이 문제를 고치려면 .htaccess 파일을 다음처럼 수정하면 된다.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} /throttle-me
RewriteRule (.*) - [L]
RewriteCond %{REQUEST_FILENAME} /twatch
RewriteRule (.*) - [L]
RewriteCond %{ENV:REDIRECT_SURI} !^$
RewriteRule (.*) - [L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ / [L]
RewriteRule ^$ blog/index.php [E=SURI:1,L]
RewriteRule ^[0-9]+$ blog/item.php [E=SURI:1,L]
RewriteRule ^favicon\.ico$ blog/favicon.ico.php [E=SURI:1,L]
RewriteRule ^index\.gif$ blog/index.gif.php [E=SURI:1,L]
RewriteCond %{QUERY_STRING} (^|&)pl=([0-9]+)
RewriteRule ^index\.php$ %2 [NE,L]
RewriteRule ^index\.php$ blog/index.php [E=SURI:1,L]
RewriteRule ^index\.xml$ blog/rss/index.php [E=SURI:1,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule !^(blog|cache)/ - [L]
RewriteRule ^(entry|attachment|category|keylog|tag|search|plugin)/? blog//index.php [E=SURI:1,L]
RewriteRule ^(.+)/[0-9]+$ blog//item.php [E=SURI:1,L]
RewriteRule ^(.+)$ blog//index.php [E=SURI:1,L]여기서
RewriteCond %{REQUEST_FILENAME} /twatch
RewriteRule (.*) - [L]는 필자가 TraceWatch를 웹 통계 프로그램으로 사용하기 때문에 삽입한 부분이다. 만약 TraceWatch를 웹 통계 프로그램으로 사용하지 않는 경우에는 이 두줄을 삭제하면된다. 이 코드를 삽입한 이유는 웹 통계 보기 주소에 해당하는 http://offree.net/twatch를 입력하면 그림처럼 페이지가 비정상적으로 표시되며, 꼭 twatch/처럼 /를 입력해야 정상적으로 표시되기 때문이다.
물론 이 코드를 삽입하면 /twatch를 삽입하면 /twatch/를 입력하든 정상적으로 표시된다.
Trackback
Trackback Address :: http://offree.net/trackback/457
-
Subject : 태터툴즈 htaccess 문제
Tracked from bLOG.DuoZ.net 2006/05/10 17:25 del.얼마전 태터툴즈의 Support 센터를 방문했다가 이번에 버전업된 1.0.4의 경우 루트에 index.php 파일이 없는데 어떻게된 일인지를 묻는 질문을 보았다. 사실 대부분의 사람들은 루트에 당연히 index.php
-
Subject : 텍스트큐브를 /, 루트에 설치 시 하위 폴더 접근 할 수 없는 문제 해결법 , .htaccess 수정
Tracked from 바니하닷컴 . Baniha.com 2009/02/08 18:28 del.텍스트큐브를 루트디렉토리...즉,,.htmlpublic_html등의 루트 디렉토리에 바로 설치하면 하위 디렉토리에 접근 할 수 가 없습니다. 그 이유는 .htaccess 이란 파일 때문에 그렇습니다. .htaccess 이 파일을
Comments
-
-
-
나그네
2006/03/30 22:53
수고많으십니다. 덕분에 많이 알게 됩니다.^^
참.. 가끔 주소 뒤에 세션 아이디가 붙는 경우가 있네요.
.htaccess 파일에 아래 내용을 삽입하면 될 것 같네요.
php_value session.use_trans_sid 0
물론 잘 아시겠지만, 혹시나 해서,,, 그리고 도움도 받고 해서 한 자 적고 갑니다. 수고하세요. -
-




Facebook