12
Окт
2015

Lowercase {QUERY_STRING}, .htaccess и кириллица

У меня есть ссылки вида:

site.ru/script.php?test=ПРИВЕТ
site.ru/script.php?test=Привет

Нужно привести к виду:

site.ru/script.php?test=привет

К сожалению, я не могу использовать RewriteMap. Вследствие чего, я использовал обработчик на php:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} [A-Z]
RewriteRule (.*) rewrite-strtolower.php?rewrite-strtolower-url=$1 [QSA,L]

Содержимое rewrite-strtolower.php:

<?php header('Content-Type: text/html; charset=utf-8');
    function myUrlEncode($string) {
        $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
        $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
        return str_replace($entities, $replacements, urlencode($string));
    }

    if(isset($_GET['rewrite-strtolower-url'])) {     
        $url = $_GET['rewrite-strtolower-url'];
        unset($_GET['rewrite-strtolower-url']);
        $params = http_build_query($_GET);
        if(strlen($params)) {         

            $params = '?' . myUrlEncode(mb_strtolower(urldecode($params),"UTF-8"));
            echo $params;
        }
        header('Location: http://' . $_SERVER['HTTP_HOST'] . '/' . $url . $params, true, 301);
        exit;
    } 
?>

После всех преобразований я получаю удовлетворяющий меня QUERY_STRING в нижнем регистре, но попадаю с ним опять под

RewriteCond %{QUERY_STRING} [A-Z]

В следствие чего - циклическое перенаправление...

Как быть? Как заставить .htaccess в RewriteCond определять кириллицу?

Если не для редиректа на lowercase, то хотя для редиректа в виде site.ru/script.php?test=Привет на транслит site.ru/script/privet

Источник: https://ru.stackoverflow.com/questions/457619/lowercase-query-string-htaccess-%D0%B8-%D0%BA%D0%B8%D1%80%D0%B8%D0%BB%D0%BB%D0%B8%D1%86%D0%B0

Тебе может это понравится...

Добавить комментарий