Недавно потребовалось в интернет-магазине на Битриксе отображать урлы с русскими буквами, например, /catalog/Коллекция_Collection-Name
Для этого пришлось подредактировать файл urlrewrite.php и добавить следующее правило:
Казалось бы, это все. Но нет. Так как сайт работал в кодировке utf-8, то Битрикс нагло игнорировал "узнавание" русских букв. Данная проблема (как и в большинстве случаев) решается установкой флага u. В итоге, правило приобретает такой вид:
Теперь Битрикс работает как надо.
Еще немного трюков:
1. Редирект с множества вариантов урлов:
Таким образом ссылки /service, /shops, /contacts, /warranty, /rules будут вести на соответствующие индексные файлы в подкаталогах каталога /info.
2. Учет дополнительных параметров в урлах
Если Ваша схема урлов довольно чувствительна к передаваемым параметрам, например:
То попытка перейти по ссылке /catalog/Коллекция_Collection-Name?clear_cache=Y вызовет у Битрикса когнитивный диссонанс и как результат 404-ю ошибку. Чтобы он воспринимал такие урлы правильно, делаем так:
Теперь Битрикс адекватно воспринимает все передаваемые GET-параметры и без проблем обновляет кеш.
3. Совершенно феерический номер - обработка урлов со слешами. Например: /catalog/Коллекция_S/S-2013
Одно из решений следующее: перед выводом урла в страницу кодируем его urlencode. При этом слеши будут заменены на выражение %2F. Теперь заменяем обычным str_replace %2F на %252F. Rewrite-правило принимает такой вид:
Теперь в скрипт обработки передается значение SECTION_CODE равное "Коллекция_S/S-2013".
Ну и финальный совет: сам битрикс очень любит перекроить файл urlrewrite.php так как хочется ему при любой удобной возможности.
Если в ваших настройках реврайтов очень важен порядок и вы не желаете неожиданных изменений, то можно поставить файлу urlrewrite.php права только на чтение - 0444 или совсем строго - только на чтение владельцу - 0400. И не забывайте хранить копию этого файла "в шаговой доступности".
Для этого пришлось подредактировать файл urlrewrite.php и добавить следующее правило:
"CONDITION" => "#^/catalog/([a-zA-Z0-9а-яёА-ЯЁ_\\-]+)$#", "RULE" => "SECTION_CODE=$1", "PATH" => "/store/collection.php",
"CONDITION" => "#^/catalog/([a-zA-Z0-9а-яёА-ЯЁ_\\-]+)$#u", "RULE" => "SECTION_CODE=$1", "PATH" => "/store/collection.php",
Еще немного трюков:
1. Редирект с множества вариантов урлов:
"CONDITION" => "#^/(service|shops|contacts|warranty|rules)$#", "RULE" => "v=1", // чит, чтобы заставить PATH воспринимать регулярное выражение "PATH" => "/info/$1/index.php",
2. Учет дополнительных параметров в урлах
Если Ваша схема урлов довольно чувствительна к передаваемым параметрам, например:
"CONDITION" => "#^/catalog/([a-zA-Z0-9а-яёА-ЯЁ_\\-]+)$#", "RULE" => "SECTION_CODE=$1", "PATH" => "/store/collection.php",
"CONDITION" => "#^/catalog/([a-zA-Z0-9а-яёА-ЯЁ_\\-]+)(.*)$#", "RULE" => "SECTION_CODE=$1&$2", "PATH" => "/store/collection.php",
3. Совершенно феерический номер - обработка урлов со слешами. Например: /catalog/Коллекция_S/S-2013
Одно из решений следующее: перед выводом урла в страницу кодируем его urlencode. При этом слеши будут заменены на выражение %2F. Теперь заменяем обычным str_replace %2F на %252F. Rewrite-правило принимает такой вид:
"CONDITION" => "#^/catalog/([a-zA-Z0-9а-яёА-ЯЁ_(\%2F)\\-]+)$#u", "RULE" => "SECTION_CODE=$1", "PATH" => "/store/collection.php",
Ну и финальный совет: сам битрикс очень любит перекроить файл urlrewrite.php так как хочется ему при любой удобной возможности.
Если в ваших настройках реврайтов очень важен порядок и вы не желаете неожиданных изменений, то можно поставить файлу urlrewrite.php права только на чтение - 0444 или совсем строго - только на чтение владельцу - 0400. И не забывайте хранить копию этого файла "в шаговой доступности".
Отличная заметка, мне помогло вот это в конце строки. Теперь и гет-параметры работают, и лишнего не вписать в ссылку.
ОтветитьУдалить))))
ОтветитьУдалитьДля ссылок http://site.ru/articles/%3FELEMENT_ID%3D77777 выдает 404 ошибку. Возможно исправить это правилами?
ОтветитьУдалитьОткуда у вас такие ссылки?
Удалить%3F это ?, %3D это =. В итоге это понимаемая любым браузером ссылка типа articles/?FELEMENT_ID=77777.
Проверьте, не происходит ли где-нибудь url-кодирования ссылки?
Такие ссылки указали на сторонних сайтах и при переходе получается 404 ошибка, сеошники ругаются.. Возможно исправление таких кодированных символов правилом?
Удалить