뭘 이런걸..

Posted
Filed under Tech/프로그래밍
IE7 에서 mod_url 이 설정되어 있는 서버로 한글 주소를 전송할 경우 encoding 이 맞으면 (즉, mod_url 이 작동할 일이 없으면..) 문제가 없지만, 맞지 않을 경우에는 무한 루프에 빠지게 되는 문제가 있습니다. 즉 예를 들어서, 다음의 조건에 해당될 경우 입니다.

  1. IE7 이 URL 의 utf8로 전송한다. (기본값임)
  2. 서버측의 mod_url 이 다음과 같이 설정이 되어 있다.
    CheckURL on ServerEncoding EUC-KR ClientEncoding UTF-8


이 조건에서, IE7 이 http://domain.com/한글.html 을 전송을 하면 실제로는

http://domain.com/%ED%95%9C%EA%B8%80.html


과 같이 "한글" 이 utf8 로 인코딩 되어 전송이 됩니다. (위에서는 편의상 urlencoding 을 했습니다. euc-kr 의 경우 인코딩을 하면 4byte 이지만, utf8 의 경우 6byte 가 되는 것으로 구분을 하기 위함입니다.)

그리고, 서버에서는 mod_url 이

iconv ("UTF-8", "EUC-KR", "%ED%95%9C%EA%B8%80");


이 성공을 하기 때문에

HTTP/1.1 301 Moved Permanently Location: http://domain.com/한글.html


을 브라우저에게 전송하게 됩니다. IE6 의 경우 이렇게 전달된 주소를 그대로 이용하기 때문에 문제가 없었는데, IE7 부터는 이 주소의 "한글" 을 다시 UTF8 로 만들어 재전송하기 때문에 무한루프에 빠지게 되는 겁니다. 그래서 이를 해결하기 위해서 return 하는 Location 의 주소를 RFC1738에 의거하여 URL encoding 하여 브라우저로 전송해 주는 방법을 사용할 수 있습니다.

HTTP/1.1 301 Moved Permanently Location: http://domain.com/%C7%D1%B1%DB.html


이를 해결하기 위해서는 다음 URL 을 참조 하시기 바랍니다.

KLDP.net mod_url project
OOPS.org mod_url CVS tree
2007/05/28 01:42 2007/05/28 01:42

며칠전에 IE7 과 mod_url 문제 수정 이라는 글에서 IE7 에서 한글 URI 를 사용할 경우 mod_url 과의 충돌로 무한 루프가 발생하는 문제를 수정하여 포스팅을 했었습니다. 그 과정에서, 301 로 재접속을 시킬때, IE7 의 재변환을 막기 위하여 url encoding 을 하여 문제를 해결했는데, 그 해결을 위해 사용했던 코드가 php raw_url_encode 함수를 수정하여 처리를 했습니다. 그런데, PHP license 와 Apa..