![]() |
Регулярное выражение. Не работает а-яА-Я
похоже, у меня на хостинге не работает такое правило, как а-яА-Яa-zA-Z
Нужно сделать запись в .htaccess Подскажите, как обратиться в хостинг с вопросом. Какой модуль или библиотека должна стоять у них на сервере для правильного отображения кириллических букв в регулярных выражениях? Хостинг - Линукс вообщем вот такое выражение не фурычит: RewriteRule ^([а-яА-Яa-zA-Z0-9\_\-]+)\/([0-9]+)\/[\+а-яА-Яa-zA-Z0-9\_\-\(\)\:\.\-]+\.htm$ index.php?production=$1&id=$2 [L] хотя может проблема быть в какой то кодировке Мне вот отвечает такими символами странными The requested URL /инÑÑ‚Ñ?укциÑ/ÐбÑ?а-КадабÑ?а/10/ТеÑÑ‚.pdf was not found on this server. |
Цитата:
|
Код:
RewriteRule ^(инструкция)\/(DJ\_микшер)\/([0-9]+)\/[\+а-яА-Яa-zA-Z0-9\_\-\(\)\:\.\-]+\.pdf$ pdftest.php?pdf=$3 [L] |
Код:
RewriteRule ^([^\/]+)\/([0-9]+)\/[^\/]+\.htm$ index.php?production=$1&id=$2 [L] |
Sham, ага : )))
|
Почему то не подхватывает кириллицу на хостинге, который даже кириллические домены поддерживает. Наверное я что то делаю не так
Нужно вот так: RewriteRule ^([a-zA-Zа-яА-Я0-9-]*)/([0-9]+)\-([a-zA-Zа-яА-Я0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E] но вот выше, там в первой части не работает а-яА-Я, т.е. кириллическая ссылка не читается Вторая часть - нормально подхватывает Делаю так, и работает: RewriteRule ^(.*)/([0-9]+)\-([a-zA-Zа-яА-Я0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E] но хотелось бы, как в первом варианте. |
кодировка htaccess должна соответствовать кодировке кириллицы из заголовка запроса (имхо только в юникоде utf8). Отследите запрос в разных браузерах, как там кириллица передается. Если urlencoded, то имхо в регекспе надо учитывать и такой вариант. Тем более, в браузерах есть настройка "кодировать урл".
Файл htaccess дб в кодировке utf8 (кодировка URL) или в регекспах учесть urlencoded символы ("символ" - %F1%E8%EC%E2%EE%EB), т.е. добавить знак процента "%" в скобки. Если сайт не в кодировке UTF, то браузеры имхо по любому кодируют неюникод-символы в урлах. |
Цитата:
Цитата:
Так типа? Код:
RewriteRule ^([a-zA-Zа-яА-Я0-9%-]*)/([0-9]+)\-([a-zA-Zа-яА-Я0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E] %D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E-%D0%B3%D0%B8%D1%82%D0%B0%D1%80%D1%83/23-classic-guitar-classic-guitar-tenson-classic-guitar-tenson-f500-090-buy-classic-guitar-tenson-f500-090-kiev.html |
пример (любой плагин к ff)
Код:
GET /post-1536966.html HTTP/1.1 ^([a-zA-Zа-яА-Я0-9\%\-]*) с кириллицей вообще сложный вопрос, имхо только UTF-8. (еще зависит от серверной ОС, и как она поддерживает кириллицу, если имена файлов в ней). |
По дэфолту было:
Код:
RewriteRule ^([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E] Код:
/%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E-%D0%B3%D0%B8%D1%82%D0%B0%D1%80%D1%83/23-classic-guitar-classic-guitar-tenson-classic-guitar-tenson-f500-090-buy-classic-guitar-tenson-f500-090-kiev.html Код:
RewriteRule ^([a-zA-Zа-яА-Я0-9\%\-]+)/([0-9]+)\-([a-zA-Zа-яА-Я0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E] На счет хедеров, то вот: Код:
http://dommuzyki.com.ua/%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E-%D0%B3%D0%B8%D1%82%D0%B0%D1%80%D1%83/23-classic-guitar-classic-guitar-tenson-classic-guitar-tenson-f500-090-buy-classic-guitar-tenson-f500-090-kiev.html RewriteRule ^(.*)/([0-9]+)\-([a-zA-Zа-яА-Я0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 [L,E] Но неинтересно |
где лежит конфиг, и в какой кодировке сохранен?
|
Цитата:
|
С передним слешем непонятно (какой путь получает правило, если с передним слешем, то добавьте \/? вначале). Сложно, не видя всего. Так вроде без ошибок.
|
В корне:
/ Код:
enca -L ru .htaccess /config Код:
enca -L ru * RewriteRule ^\/?([a-zA-Zа-яА-Я0-9\%\-]+)/([0-9]+)\-(.*)\.html(.*)$ /product.php?id_product=$2$4 [L,E] |
а зачем флаг E? он для переменной...
|
Цитата:
движок: prestashop |
имхо сервер неправильно декодирует путь и правило получает уже неверную кодировку. Попробуйте вывести, что получает правило (echo $_SERVER['QUERY_STRING'] //upd: или $_GET['all'] тогда) c правилом
upd: без условия может зациклить Код:
RewriteCond %{REQUEST_FILENAME} !-f так имхо надежнее Код:
RewriteRule ^\/?[^\/]+/([0-9]+)\-.*\.html$ /product.php?id_product=$1 [L] |
apache 2.2, htaccess в utf8: если в правиле напрямую кириллицу указывать, то работает, если в 16-ричном (типа \xC1) - то нет. Но при выводе пути (в браузер) кириллица все-равно преобразована неправильно.
Т.е. с кириллицей в пути URLa лучше не связываться, т.к. непонятно, как декодируются из экранированного пути. При этом get-параметры декодируются веб-сервером правильно, как ни странно. Можно предположить, что экранированный путь декодируется в системную кодировку сервера (в кодировку файловой системы), из-за этого неувязочка. |
Цитата:
я вот, если сам какой то движок мини делаю, то с кириллицей поступаю так. В .htaccess пишу: Код:
AddDefaultCharset UTF-8 PHP код:
прокомментриуйте пожалуйста способ)) |
если
Цитата:
Цитата:
в правиле можно направлять на этот скрипт только урлы, содержащие нелатиницу [^\w] или [^a-zA-Z0-9\/\-\_\.] - и в таком духе (набор символов определяется на практике). не спамь в полезняшки |
Время: 01:40. |
Время: 01:40.
© OSzone.net 2001-