RewriteEngine, RewriteRule и русские буквы в .htaccess

Иногда требуется в .htaccess сделать редирект (внутренний или внешний) при помощи mod_rewrite для ЧПУ адресов с русскими буквами. Но проблема в том, что русские SEO-URL не обрабатываются в .htaccess (за исключением маски .* - любой символ)

Варианты вроде
RewriteRule %EF%E8%F1%FC%EC%EE letter.htm [R=301,L]
RewriteRule Письмо letter.htm [R=301,L]
# пробуем экранировать символ процента
RewriteRule ^(\%) index.php?url=$1

И всё-таки, как написать RewriteRule при кодировании русских ссылок?

RewriteRule ^([0-9-А-Я]+)(/)? index.php [R=301,L]

Методом проб и ошибок установлено, что в правилах, написанных в .htaccess не распознаётся символ %

Один из работающих вариантов, который перенаправляет все обращения к адресу

AddDefaultCharset UTF-8
RewriteRule ^(.*) index.php?url=$1 [L]

Естественно, его следует дополнить условиями (если файл или каталог не существует)

“Нормального” решения, как преобразовать конкретный русский адрес именно в .htaccess я не нашёл.
www.site.ru/русский_URL.html
/%EF%E8%F1%FC%EC

Вот такой код работает, однако перечислять все русские буквы в .htaccess - не есть хорошо
RewriteRule ^([абвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯa-zA-Z0-9\%]+)$ index.php?url=$1

Клёвый гайд по RewriteRule http://www.egoroff.spb.ru/portfolio/apache/rewriteguide.html

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (5) к записи “RewriteEngine, RewriteRule и русские буквы в .htaccess”

  1. Игорь сообщает :

    У меня таже проблема-русские буквы на старом сайте, на новом-английские (сервер Apache). Делаю следующее:
    [U]в .htaccess:[/U]
    RewriteEngine on
    RewriteBase /
    # разрешить файла в корне c хотя бы одной точкой в имени
    # сюда же попадет и index.php
    RewriteRule ^[^/]+(\.+[^/]+)+$ - [L]
    # разрешить нужные папки в корне
    RewriteRule ^(img|css|js)/ - [L]
    # все остальные реврайтить в index.php
    RewriteRule ^.*$ /index.php [NS]
    [U]в index.php:[/U]
    // Русские буквы в .htaccess
    echo $app;
    $Addr = trim($_SERVER[’REQUEST_URI’], ‘/’);
    if ($Addr != ”) $Addr = explode(’/', $Addr);
    else $Addr = array();
    куда же мне вписывать строку редиректа:
    Redirect 301 /Картриджи-и-комплектующие/Картридж-Гейзер-СВС-с-серебром-10SL.html http://filter-tver.com/kartridzhi-i-komplektuyushchie/dlya-filtrov/gejzer/item/svs-s-serebrom-10sl

  2. Artur сообщает :

    Да супер мучил я ссылки на русском и сделал на этом сайте [[anobay.com.ua]]

  3. vmp сообщает :

    Решается на самом деле просто.
    В условие RewriteRule пишите не “а-я” , а “абвгде..”, и будет счастье)

  4. Игорь сообщает :

    Спасибо. :) Где Вы были год назад, переделал сайт на латинские, а ссылки 301 редиректом перенаправил.
    [filter-tver.com]

  5. levik сообщает :

    В условие RewriteRule пишите не “а-я” , а “абвгде..”, и будет счастье)

    vmp, всё верно. Именно этот вариант и приведён как рабочий способ использовать русские буквы в .htaccess ближе к завершению статьи.

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