Как убрать /catalog из адресной строки?
В Битриксе есть множество настроек для того, чтобы настроить ЧПУ так, как это необходимо. Однако если компонент располагается в какой-либо папке, то это может создать ненужную вложенность. В этой статье я расскажу о том, как её убрать. Например, мы хотим убрать сегмент /catalog из адресной строки. Для решения этой задачи делаем так:
- Помещаем вызов комплексного компонента bitrix.catalog в корень. Например, в файл /catalog.php
- Обращаемся через адресную строку браузера к этому файлу, открываем настройки компонента и настраиваем ЧПУ. Для этого на вкладке «Управление адресами страниц» прописываем необходимые правила для обработки адресов. В моём случае, старая структура имела вложенные URL, поэтому я задействовал следующую конструкцию:
#SECTION_CODE_PATH#
При этом в админке по следующему пути «Настройки — Обработки адресов — Правила обработки» должно автоматом прописаться правило:
#^/# — bitrix:catalog — /catalog.php
На самом деле, данная секция настроек, это ни что иное, как графический интерфейс для файла urlrewrite.php Поэтому если что-то работает не так, как вам бы того хотелось, рекомендуется проверить этот файл и посмотреть где находится данное правило — оно должно располагаться на самом верху, иначе ЧПУ для каталога не будет работать.
Комментарии ( )
Вы должны авторизоваться, чтобы оставлять комментарии.
Авторизация
Вы можете авторизоваться на сайте через:
VkontakteYandex
Избавляемся от index.php в адресах
Например, вот эти две страницы на вашем сайте отдают один и тот же контент, что для ПС есть дубль:
/catalog/ /catalog/index.php
Настройка индексной страницы в 1С Битрикс
В Битриксе поможет нам в этом штатная константа BX_DISABLE_INDEX_PAGE, ее описание из официальной документации:
Может принимать значение true/false. Константа регулирует значение по умолчанию для параметра get_index_page функций GetPagePath(), CMain::GetCurPage(), CMain::GetCurPageParam().
Параметр get_index_page указывает, нужно ли для индексной страницы раздела возвращать путь, заканчивающийся на «index.php». Если значение параметра равно true, то возвращается путь с «index.php», иначе — путь, заканчивающийся на «/». Параметр имеет значение, обратное значению константы.
В этом файле
/bitrix/php_interface/dbconn.php
Добавьте эту константу, в любом месте
define(«BX_DISABLE_INDEX_PAGE», true);
Все, обновите страницу в публичной части и проверяйте, во всех ссылках должна исчезнуть индексная страница index.php
Если не исчезли, пробуйте сбросить весь кэш, особенно композитный, если не помогло, то могут мешать хитрые следы разрабов или сеошников например в файле urlrewrite.php или еще хоть где.
Так мы исправили проблему в адресах сайта, но это еще не все, если вы напрямую откроете страницу
/catalog/index.php
то она также откроется, никуда не денется, на самом сервере она есть, потому что в предыдущем примере мы убрали индексную страницу только из адресов (ссылок) Битрикса, а сами страницы напрямую открываются по правилам сервера, на сервере тут сложней, разными способами можно избавляться от этого, хоть в знаменитом файле .htaccess хоть в конфигах самого nginx или apache2
301 редирект с /index.php на / в .htaccess
В корне сайта находим файл .htaccess и добавляем в нем запись где-то после RewriteEngine On
RewriteCond % ^[A-Z]\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://example.com/ [R=301,L]
Пример для сайта работающего на защищенном протоколе https:// с 301 редиректом с www на без wwww , только замените в нем адрес example.com на свой, например tuning-soft.ru
Options +FollowSymLinks RewriteEngine On RewriteCond % ^[A-Z]\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://example.com/ [R=301,L] RewriteRule ^(.*)=(.*) /$1$2 [L,R=301] RewriteCond % ^www\.(.*) [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond % =off RewriteRule (.*) https://%% [QSA,L] RewriteCond % !-f RewriteCond % !-l RewriteCond % !-d RewriteCond % !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteRule .* - [E=REMOTE_USER:%]
301 редирект с /index.php на / в nginx
На каждом сервере пути до конфигов могут быть совершенно разные, но в панели VESTA по умолчанию конфиги в папке пользователя по этому пути
/home/user1254/conf/web/snginx.conf
Для https|ssl это файл snginx.conf , а для http это файл nginx.conf где в секции server <. >примерно после строки set $php_sock 127.0.0.1:9018; необходимо добавить код ниже и заменить example.com
#301 редирект с www на без www if ($host = ‘www.example.com’ ) < rewrite ^(.*)$ https://example.com$1 permanent; >#301 редирект с index.php на / if ($request_uri ~* «^(.*/)index\.php$»)
Обязательно после изменений конфига nginx его необходимо перезагрузить, делается это, например, в PuTTY по SSH так:
#service nginx restart
Битрикс: убрать в компоненте каталога название папки из url
Для создания «красивого URL» (было битрикс/catalog/magazin_razdel стало битрикс/magazin_razdel) в битриксе понадобилось следующее.
В настройках компонента есть возможность указать рабочую папку компонента.

Указываем корневую папку, как на картинке.
В папке каталога (стандартно /catalog/) создать файл .htaccess с содержимым:
Options +FollowSymLinks RewriteEngine On RewriteCond % ^[A-Z]\s/+catalog([^\s]*) [NC] RewriteRule ^ %1 [R=301,L]
Теперь при запросе адреса Битрикс/catalog/catalog_razdel пользователь будет перенаправлен на страницу Битрикс/catalog_razdel
Битрикс – Как убрать в ссылках на товар /catalog/
Рассмотрим один из вариантов как сделать ссылки без папки catalog.
Как в Битриксе создать url без указания папки каталога
В случае когда нам нужно просто переименовать папку, вся работа состоит из таких шагов:
1. Переименовать папку, например, заходим на FTP и переименовываем store на catalog.
2. Заходим в инфоблок и в его настройках меняем 3 правила формирования #SITE_DIR#/store/ на #SITE_DIR#/catalog/
3. Открываем настройки компонента каталога и также само прописываем вместо /store/ – /catalog/. Правила формирования остаются такими же – #SECTION_CODE#/#ELEMENT_CODE#/. При сохранении компонента происходит перезапись файла urlrewrite.php. Если вы меняете папку через код файла /catalog/index.php – то вам также нужно изменить правило в urlrewrite.php.
Для чего вам вся эта информация?) Теперь вы лучше понимаете стандартную процедуру переименования и формирования ссылок в Битриксе.
А сейчас перейдем непосредственно к решению задачи – убираем /catalog/ из ссылок. Открываем urlrewrite:
array ( 'CONDITION' => '#^/#', 'RULE' => '', 'ID' => 'bitrix:catalog', 'PATH' => '/catalog/index.php', 'SORT' => 20, ),
Если у вас есть многосайтовость, то правило будет таким:
array ( 'CONDITION' => '#^/ru/#', 'RULE' => '', 'ID' => 'bitrix:catalog', 'PATH' => '/ru/catalog/index.php', 'SORT' => 100, ),
В инфоблоке оставляем такие настройки:
URL страницы информационного блока: #SITE_DIR#/catalog/
URL страницы раздела: #SITE_DIR#/#SECTION_CODE#/
URL страницы детального просмотра: #SITE_DIR#/#SECTION_CODE#/#ELEMENT_CODE#/
Если вы используете SECTION_CODE_PATH – учитывайте это в настройках, т.к. на примере SECTION_CODE.
И последнее что нам необходимо сделать, переделать файл /catalog/index.php. Рассмотрим код:
..bitrix:catalog.section.. ..bitrix:catalog..
При помощи такой проверки мы всё же оставляем папку /catalog/ – на ней будет компонент bitrix:catalog.section – в котором вы можете выводить либо список разделов, либо общий список товаров без привязки к ID раздела. Или же просто возьмите код из sections.php вашего компонента, и добавьте параметры из bitrix:catalog – он выполняется в блоке между else -> endif. По сути блок между else -> endif уже был на странице, и, в некоторых случаях, мы копируем полностью все параметры в блок if -> else.
Какие есть минусы у такого способа? Если у вас есть другие динамические компоненты, например новости, вам придется разместить код компонента на странице /catalog/index.php, например так:
Без этого на сайте будет ошибка 404. Для блога используем bitrix:news. При многосайтовости указываем /ru/catalog/ и /ru/blog/.
Друзья, вот и все Надеюсь у вас всё получилось. Возможно у вас есть способ реализовать это более красивее, если это так – жду в комментариях. Конструктивная критика приветствуется