Не работают ЧПУ в битриксе: 3 причины
При разработке магазина на битриксе достаточно часто возникают сложности с настройкой ЧПУ на сайте. Не столь важно, в компоненте ли каталога, новостей, или же каких-либо иных. Казалось бы, настройка ЧПУ по документации битрикса достаточно тривиальна, и там не может что-то пойти не так. Однако, опыт автора настоящей статьи, и те форумы, куда автор обращался за решением, говорят об обратном. Проблема существует и достаточно актуальна.
Ниже представлены 3 самые распространенные причины того, почему могут не работать настройки ЧПУ в битриксе. Причем могут не работать ЧПУ для всех типов страниц компонента, или же только для детальных страниц. Итак, причины могут быть следующими:
- Неправильные настройки ЧПУ в настройках инфоблока и компонента
- Ошибки в urlrewrite.php
- Некорректные правила в .htaccess
Следует рассмотреть каждую причину детально.
1. Неправильные настройки ЧПУ в инфоблоке и компоненте
Данная причина является самой простой по своему характеру и самой легкой в исправлении. Собственно, диагностику корректности настройки ЧПУ на сайте нужно начать с этого шага.
Подробное описание о том, как настроить ЧПУ для компонента можно найти в справке (учебных курсах) битрикса. Однако, в качестве примера, хотелось бы привести наиболее типичные настройки ЧПУ для каталога товаров в интернет-магазине:
Шаг А. Настройки ЧПУ в инфоблоке
На вкладке настроек инфоблока ( “Контент” > “Инфоблоки” > “Типы инфоблоков” > Далее индивидуально ) указываем:
Шаг Б. Настройки ЧПУ в компоненте каталога
В настройках компонента, на вкладке “управление адресами страниц”, указываем:
Сохраняем изменения, сбрасываем кеш, проверяем результат. Если ЧПУ не работают, переходим к шагу 2.
2. Проблемы с файлом urlrewrite.php
Говоря простыми словами, urlrewrite.php, лежащий в корне сайта — это файл, в котором содержатся правила, в которых сообщается серверу о том, как обрабатывать тот, или иной файл.
В самом деле, может быть несколько причин, почему правила, записанные в urlrewrite, могут работать некорректно:
- Нарушена очередность правил
- Ошибка сохранения при перезаписи файла CMS
- CMS, при сохранении настроек компонента перезаписала настройки, ранее внесенные в файл руками
- Ошибки в путях, синтаксисе и т.д.
Источник
ЧПУ и ошибка 404
Проблема проста. Чувствую что решается за пять минут, но пока ни как не пойму куда копать. Нужно чтоб URL были вида https://site.org/catalog/nazvanie_tovara.html
Что я делала. В настройках компанента написала
| URL страницы информационного блока: | #SITE_DIR#/catalog/ |
| URL страницы раздела: | #SITE_DIR#/catalog/#SECTION_CODE#/ |
| URL страницы детального просмотра: | #SITE_DIR#/catalog/#ELEMENT_CODE#.html |
Я почему-то думала что для начала этого должно хватить, но страницы открываются по старому.
https://site.org/catalog/kod_razdela/cod_tovara/
Тоесть выходит что оно берет вид этих ссылок откуда-то еще, но сколько читала, всюду написано что именно тут. Кэш сбрасывала, не помогает. Решила чтоб на верняка попробовать настроить еще в самом компаненте. Открыла каталог, включила режим правки, и там вкомпаненте прописала тоже самое. сами ссылки на странице поменялись, стали такимикак я хотела, но они же не работают, работают те старые. Что я еще не учла? Если что то и в управлении адресами добавляла правило #^catalog/(.*).html$# , но и оно не помагало. буду благодарна за любую подсказку.
| Цитата |
|---|
| Андрей написал: Обычно это все прописывается в настройках инфоблока и затем дублируется в настройках компонента и ЧПУ работает. Разве нет? |
В настройках инфоблока как обычно:
Самописное правило из обработки адресов удалите, а затем еще раз откройте настройки компонента и сохраните — если там отмечена галочка использования ЧПУ, Битрикс в этот момент сам прописывает правило обработки адресов.
Это все, больше никаких настроек не нужно, все должно работать. Если нет — пишите, попытаемся разобраться почему не работает.
то редерикт на 404 остается.И вот что еще. Сейчас попробовала допустить умышленно ошибку вкоде, то тогда вместо 404 крашится с ошибкой, тоесть настройка работает, осталось подружить это все с самим компанентом.
Блин. Наверно не понятно написала, сама запуталась, а до понедельника край как нужно сделать, в понедельник выгрузку товаров уже делать. Помогите.
| Цитата |
|---|
| Денис Сон написал: Напишите, пожалуйста, адрес сайта где можно увидеть проблему. |
| Цитата |
|---|
| Денис Сон написал: опробуйте его закомментировать — проблема, скорее всего уйдет. |
| Цитата |
|---|
| Наталия Курилович написал: но только не пойму почему тогда если закоментировать строки с |
| Цитата |
|---|
| Наталия Курилович написал: Не то.Проблема актуальна. Думаю что проще в htaccess правила прописать и не мучаться. |
Вот верная настройка 404 страницы, специально написали эту статью, чтобы раз и навсегда закрыть эту тему, так как это одна из самых распространенных ошибок:
| Цитата |
|---|
| Наталия Курилович написал: Не то.Проблема актуальна. Думаю что проще в htaccess правила прописать и не мучаться. |
Вот верная настройка 404 страницы, специально написали эту статью, чтобы раз и навсегда закрыть эту тему, так как это одна из самых распространенных ошибок:
Источник
Не работает 404 ошибка в 1с битрикс. Правильная настройка
В битриксе 404 ошибка отрабатывается весьма специфически — неправильный адрес со статических страниц и разделов корректно перебрасывает на страницу 404.php, при этом сохраняя неправильный URL в адресной строке браузера. То есть все по seo.
А вот если неправильный адрес начинается с раздела инфоблока или каталога, то сервер отдаст браузеру 404 статус страницы (и то при определенных настройках инфоблока, о которых ниже), но 404 страницу не покажет, а покажет корневую страницу инфоблока, причем иногда совсем другого инфоблока. Но все-таки сохранит неправильный URL в адресной строке.
В интернете данный вопрос поднимался не раз. Когда-то популярным решением была настройка в битрикс принудительного редиректа на 404 страницу.))) Перечитав изрядно статей, выполнив несколько найденных инструкций, желаемого результата добиться не удалось(((. Пришлось, вооружившись командой print backtrace, отловить негодяйскую 404 ошибку и заставить ее работать как положено.
Ставим задачу:
- Нужно, чтобы инфоблоки и каталоги в случае неправильной ссылки отдавали 404 статус
- Нужно, чтобы этот статус правильно обрабатывался и приводил к вызову страницы 404.php
На что стоит обратить внимание:
1. Файл 404.php — лежит в корне сайта. Должен выглядеть вот так (тут все стандартно):
2. В .htaccess должна быть вот такая строчка:
Если у вас сервер на nginx, то нужно прописать в конфиге, в секции location, следующее:
тех. отступление:
Попробуем сэмулировать 404 ошибку с какой-нибудь статической страницы и отловить результат через команду debug_print_backtrace ( ) ;
Смотрим файл — видим там строку с инклюдом 404 страницы. Она вызывается, очевидно, в том случае, если страница не найдена в структуре файлов и папок, а также в файле urlrewrite.php в корне сайта, где как раз описаны все наши инфоблоки и каталоги (для правильной работы ЧПУ).
Первая поставленная нами задача выполняется настройкой инфоблоков и компонентов:
3. Проверим настройки самих каталогов:
URL страницы ИБ — должен указывать на папку, из которой будет осуществляться вызов инфоблока.
URL страницы раздела — если структура инфоблока будет иметь подразделы, то ссылка должна строиться на основе символьного кода раздела.
URL страницы детального просмотра — если элемент находится в подразделе, то к ссылке будет прибавляться символьный код раздела перед символьным кодом элемента. Иначе — только символьный код элемента.
4. И инфоблоков:
то есть, как мы видим, для инфоблоков подразделы можно не описывать.
5. Проверяем настройки вызова инфоблоков:
Обязательно проверяем, что отмечена галка «Включить поддержку ЧПУ»!
Каталог ЧПУ — корневая папка инфоблока
Раздел — #SECTION_CODE#/ — повторяем из настроек инфоблока, но не ставим слеш в начале, иначе компонент будет работать не верно
Детальная информация — #SECTION_CODE#/#ELEMENT_CODE#/ — ссылка формируется на основе символьного кода раздела (если есть) и кода элемента. Опять же, слеш в начале не ставим!
Если предполагается, что все элементы будут располагаться в корне инфоблока, без подразделов, то можно использовать следующие настройки:
То есть поле для страницы раздела вообще можем пропустить , для страницы элемента: #ELEMENT_CODE#/ . Не забываем пропустить слеш в начале!
6. Отмечаем галочку там же в настройках: «Устанавливать статус 404, если не найдены элемент или раздел:».
тех. отступление:
После сохранения всех настроек, если мы набираем в разделе инфоблока неправильный адрес, то по-прежнему вместо 404 страницы увидим корневую страницу раздела инфоблока, но страница будет иметь в заголовке 404 статус. Посмотреть его можно через браузерную панель разработчика:
Этим мы и воспользуемся, а чтобы данный статус правильно обрабатывался
7. Добавим следующий код в файл /bitrix/php_interface/init.php:
С этого момента страница ошибок будет работать! (наверно))) Если нет, опишите вашу ситуацию в комментариях
UPD от 29.08.15: чуть обновил код файла 404.php и сниппет для init.php
UPD от 15.01.18: настраивал сегодня на одном проекте отладку 404-й ошибки по данной инструкции. Все работает отлично)) Версия битрикса — последняя на указанную дату
Роман Моренец
С 2009 года веб-дизайн — моя основная сфера деятельности. Создаю проекты разного уровня сложности, оказываю поддержку, разрабатываю индивидуальные решения, помогаю новичкам.
Конвертируем гостей и анонимов в честных пользователей wordpress
Источник
ЧПУ и ошибка 404
Проблема проста. Чувствую что решается за пять минут, но пока ни как не пойму куда копать. Нужно чтоб URL были вида https://site.org/catalog/nazvanie_tovara.html
Что я делала. В настройках компанента написала
| URL страницы информационного блока: | #SITE_DIR#/catalog/ |
| URL страницы раздела: | #SITE_DIR#/catalog/#SECTION_CODE#/ |
| URL страницы детального просмотра: | #SITE_DIR#/catalog/#ELEMENT_CODE#.html |
Я почему-то думала что для начала этого должно хватить, но страницы открываются по старому.
https://site.org/catalog/kod_razdela/cod_tovara/
Тоесть выходит что оно берет вид этих ссылок откуда-то еще, но сколько читала, всюду написано что именно тут. Кэш сбрасывала, не помогает. Решила чтоб на верняка попробовать настроить еще в самом компаненте. Открыла каталог, включила режим правки, и там вкомпаненте прописала тоже самое. сами ссылки на странице поменялись, стали такимикак я хотела, но они же не работают, работают те старые. Что я еще не учла? Если что то и в управлении адресами добавляла правило #^catalog/(.*).html$# , но и оно не помагало. буду благодарна за любую подсказку.
| Цитата |
|---|
| Андрей написал: Обычно это все прописывается в настройках инфоблока и затем дублируется в настройках компонента и ЧПУ работает. Разве нет? |
В настройках инфоблока как обычно:
Самописное правило из обработки адресов удалите, а затем еще раз откройте настройки компонента и сохраните — если там отмечена галочка использования ЧПУ, Битрикс в этот момент сам прописывает правило обработки адресов.
Это все, больше никаких настроек не нужно, все должно работать. Если нет — пишите, попытаемся разобраться почему не работает.
то редерикт на 404 остается.И вот что еще. Сейчас попробовала допустить умышленно ошибку вкоде, то тогда вместо 404 крашится с ошибкой, тоесть настройка работает, осталось подружить это все с самим компанентом.
Блин. Наверно не понятно написала, сама запуталась, а до понедельника край как нужно сделать, в понедельник выгрузку товаров уже делать. Помогите.
| Цитата |
|---|
| Денис Сон написал: Напишите, пожалуйста, адрес сайта где можно увидеть проблему. |
| Цитата |
|---|
| Денис Сон написал: опробуйте его закомментировать — проблема, скорее всего уйдет. |
| Цитата |
|---|
| Наталия Курилович написал: но только не пойму почему тогда если закоментировать строки с |
| Цитата |
|---|
| Наталия Курилович написал: Не то.Проблема актуальна. Думаю что проще в htaccess правила прописать и не мучаться. |
Вот верная настройка 404 страницы, специально написали эту статью, чтобы раз и навсегда закрыть эту тему, так как это одна из самых распространенных ошибок:
| Цитата |
|---|
| Наталия Курилович написал: Не то.Проблема актуальна. Думаю что проще в htaccess правила прописать и не мучаться. |
Вот верная настройка 404 страницы, специально написали эту статью, чтобы раз и навсегда закрыть эту тему, так как это одна из самых распространенных ошибок:
Источник