Rev. 2.73

RewriteEngine On
RewriteBase /
RewriteRule ^search/(.*)$ index.php?stext=$1 [L]

예를 들어 모드-리라이트(mod_rewrite)가 지원되는 서버 환경에서 태터툴즈 클래식에 위와 같은 RewriteRule을 .htaccess에 적용하면 다음과 같은 URL로 검색결과에 접근할 수 있게됩니다.
firejune.com/search/검색
urlencode = %EA%B2%80%EC%83%89
rewrite = firejune.com/index.php?stext=%EA%B2%80%EC%83%89

그러나 아래와 같이 문자열에 '/'가 삽입된 검색어를 입력하면 '/'문자가 '%2F'로 인코딩되면서 Apache 서버로부터 "404 object not found"가 발생합니다.
firejune.com/search/http://google.co.kr
urlencode = http%3A%2F%2Fwww.google.co.kr
error, 404 object not found.

mod_rewrite는 '%2F'문자열을 경로로 인식하기 때문입니다. 이 문제를 해결하려면 urlencode된 '%2F'문자열을 찾아서 '/'로 다시 돌려주거나 rawurlencode를 이용해서 '%252F'와 같이 인코딩하면 이 오류를 피할 수 있습니다. url 전체에 rawurlencode를 쓰면 오류는 피할 수 있으나 한글인코딩 문자열에도 모두 적용되기 때문에 사용하지 않는 것이 좋을것 같습니다.

$url = '검/색';

$url = rawurlencode(urlencode($url));
// ==> $url = %25EA%25B2%2580%252F%25EC%2583%2589

function rewrite_urlencode($url) {
    $url = str_replace('%2F', '%252F', urlencode($url));
    // or $url = str_replace('%2F', '/', urlencode($url));
    return $url;
}
$url = rewrite_urlencode($url) ;
// ==> $url = %EA%B2%80%252F%EC%83%89

Comments

Got something to add? You can just leave a comment.

Your Reaction Time!

captcha

avatar