При разработке магазина на битриксе достаточно часто возникают сложности с настройкой ЧПУ на сайте. Не столь важно, в компоненте ли каталога, новостей, или же каких-либо иных. Казалось бы, настройка ЧПУ по документации битрикса достаточно тривиальна, и там не может что-то пойти не так. Однако, опыт автора настоящей статьи, и те форумы, куда автор обращался за решением, говорят об обратном. Проблема существует и достаточно актуальна.
Ниже представлены 3 самые распространенные причины того, почему могут не работать настройки ЧПУ в битриксе. Причем могут не работать ЧПУ для всех типов страниц компонента, или же только для детальных страниц. Итак, причины могут быть следующими:
- Неправильные настройки ЧПУ в настройках инфоблока и компонента
- Ошибки в urlrewrite.php
- Некорректные правила в .htaccess
Следует рассмотреть каждую причину детально.
1. Неправильные настройки ЧПУ в инфоблоке и компоненте
Данная причина является самой простой по своему характеру и самой легкой в исправлении. Собственно, диагностику корректности настройки ЧПУ на сайте нужно начать с этого шага.
Подробное описание о том, как настроить ЧПУ для компонента можно найти в справке (учебных курсах) битрикса. Однако, в качестве примера, хотелось бы привести наиболее типичные настройки ЧПУ для каталога товаров в интернет-магазине:
Шаг А. Настройки ЧПУ в инфоблоке
На вкладке настроек инфоблока (“Контент” > “Инфоблоки” > “Типы инфоблоков” > Далее индивидуально) указываем:
Шаг Б. Настройки ЧПУ в компоненте каталога
В настройках компонента, на вкладке “управление адресами страниц”, указываем:
Сохраняем изменения, сбрасываем кеш, проверяем результат. Если ЧПУ не работают, переходим к шагу 2.
2. Проблемы с файлом urlrewrite.php
Говоря простыми словами, urlrewrite.php, лежащий в корне сайта — это файл, в котором содержатся правила, в которых сообщается серверу о том, как обрабатывать тот, или иной файл.
В самом деле, может быть несколько причин, почему правила, записанные в urlrewrite, могут работать некорректно:
- Нарушена очередность правил
- Ошибка сохранения при перезаписи файла CMS
- CMS, при сохранении настроек компонента перезаписала настройки, ранее внесенные в файл руками
- Ошибки в путях, синтаксисе и т.д.
Но, зачастую, достаточно проверить правильность записи значений в файле. Например, для каталога из пункта 1, правило в urlrewrite.php выглядит следующим образом:
11 => array ( 'CONDITION' => '#^/catalog/#', 'RULE' => '', 'ID' => 'bitrix:catalog', 'PATH' => '/catalog/index.php', 'SORT' => 100, ),
В практике автора была ситуация, когда из-за какой-то внутренней ошибки CMS не сохранила правило обработки для каталога в файл и пришлось внести его руками. Соответственно, после добавления ЧПУ заработали и проблема была решена.
3. Некорректные правила в .htaccess
Данная причина встречается значительно реже, чем две предыдущие. В практике автора она возникала в одном случае — когда на сайте, ранее использовавшим какое-то тиражное решение для интернет-магазина, нужно было развернуть бекап битрикса с типовым шаблоном интернет-магазина. Собственно, при развертывании бекапа ЧПУ на сайте переставали работать, хотя на тестовом сервере с аналогичными настройками всё работало прекрасно. Единственным отличием между боевым сервером и тестовом, было то, что на боевом было развернуто тиражное решение.
Проблема заключалась в том, что при развертывании бекапа, битрикс оставляет текущий файл .htaccess, а .htaccess из бекапа сохраняет как копию. Следовательно, для того, чтобы исправить данную проблему достаточно заменить данный файл.
Ниже представлены базовые правила из .htaccess, относящиеся к обработке адресов, типового сайта на битриксе:
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}] </IfModule>
В заключение данной статьи стоит заметить, что, вероятно, это не все возможные проблемы, связанные с неработающими ЧПУ в битриксе, но точно самые распространенные.