По дате Август 24th, 2011

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

Опубликовано Август 24, 2011 | автор: levik  |  Комментарии (5) »