이미 제기된 문제이나, 원규님께서 제대로 인지를 하지 못하는 것 같아서, 정식적으로 문제 제기와 patch 를 올립니다.
일단, 이 문제는 IE7 의 url sending 부분의 변화 때문입니다. 즉, IE7 은 기본적으로 url 을 utf8 로 전송이 되게끔 되어 있습니다. 이 문제로 인하여 mod_url 이 만들어진 이유입니다. 그런데, IE7 부터는 다음과 같은 문제가 발생을 합니다. IE7 에서 다음의 url 로 질의를 하는 경우의 예를 들겠습니다.
http://domain.com/한글.txt
IE7 sending :
http://domian.com/한글.txt (sending with UTF8)
mod_url responsed:
HTTP/1.1 301 Moved Permanently
Date: Sun, 27 May 2007 14:43:19 GMT
Server: Apache
Location:
http://domain.com/한글.txt
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
f8
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>301 Moved Permanently</TITLE>
</HEAD><BODY>
<H1>Moved Permanently</H1>
The document has moved <A HREF="
http://work.oops.org/modurl/한글.txt">here</A>.<P>
</BODY></HTML>
위와 같은 과정을 거치는 과정에서, 301 Moved Permanently 로 주어진 주소를 IE7 이 다시 UTF8 로 인코딩 하여 전송을 하면서 무한 루프가 발생하게 되는 겁니다. 저도 mod_url 코드를 제대로 본적이 없어서, 그냥 내부적으로 해당 경로에 파일이 없으면 iconv 를 해 본 후에 다시 파일을 여는 것으로 알고 있었는데, 지금 코드를 다시 보니 301 리턴을 하여 브라우져로 하여금 재접속을 시키는 것이었네요. 그리고 IE7 의 경우에는 이 과정에서 무한 루프를 돌게 되는 겁니다.
이 문제를 해결하기 위해서, ASCII 이외의 영역의 charactor 를 RFC1738 에 따라 인코딩 해 주어서 문제를 해결을 할 수 있을 것 같습니다.
제가 첨부한 패치는 php 의 raw_url_encoding 함수를 조금 수정하여 이 문제를 해결한 패치입니다. 일단 작동여부는 확인을 하였으나, 라이센스를 어떻게 처리해야 할 지 모르겠습니다. 일단, 패치에서는 check_redurl_encode 함수에 따로 라이센스에 관련된 주석을 달았고, 이 패치에 해당되는 부분은 "#define CHECK_REDURL_ENCODE_LICENSE" 에 의해서 제어가 되도록 패치를 해 놓았습니다.
이 함수를 재작성 하시든지.. 아니면.. 라이센스를 어떻게든 처리하셔서 적용하시면 될 것 같습니다.