Очень часто SEOшники и оптимизаторы сайтов защищают проект от дублей и ошибки 404. Разбираем подробней как быстро настроить редирект или изменить правила формирования в самом Битриксе.
Прежде всего, зайдите в информационный блок и настройки компонента. Там необходимо прописать правила для разделов и элементов:
#SECTION_CODE#/ #ELEMENT_CODE#/
Убедитесь что эти настройки везде выставлены, если это не помогло, значит проблема не в Битриксе.
Переходим ко второму шагу. В файле .htaccess, который расположен в корне сайта добавьте запись:
<IfModule mod_rewrite.c> RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
Сразу после
<IfModule mod_rewrite.c>
Полный файл может выглядеть вот так:
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_FILENAME} [\xC2-\xDF][\x80-\xBF] [OR] RewriteCond %{REQUEST_FILENAME} \xE0[\xA0-\xBF][\x80-\xBF] [OR] RewriteCond %{REQUEST_FILENAME} [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} [OR] RewriteCond %{REQUEST_FILENAME} \xED[\x80-\x9F][\x80-\xBF] [OR] RewriteCond %{REQUEST_FILENAME} \xF0[\x90-\xBF][\x80-\xBF]{2} [OR] RewriteCond %{REQUEST_FILENAME} [\xF1-\xF3][\x80-\xBF]{3} [OR] RewriteCond %{REQUEST_FILENAME} \xF4[\x80-\x8F][\x80-\xBF]{2} RewriteCond %{REQUEST_FILENAME} !/bitrix/virtual_file_system.php$ RewriteRule ^(.*)$ /bitrix/virtual_file_system.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L] 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>
Также, блок для mod rewrite можно заменить на это:
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$ RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L] 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>
Надеюсь данный код помог решить вашу SEOшную задачу 🙂
Вставил:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
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}]
Все работает. Спасибо!
Рад что помогло 🙂
я не разработчик, просто работаю с сайтом.
файл .htaccess в корне сайта работает правильно. Но, есть еще файлы .htaccess во вложенных папках, которые создают страницы 2 и далее уровней. И вот на этих страницах нет редиректа на со слэшем . Все другие редиректы на этих страницах срабатывают.
Прочла кучу инофрмации, но никто не пишет про настройку внутренних файлов .htaccess . Вы не могли бы подсказать как мне настроить редиректы у страниц типа
тут вам не подскажу, потому как разрабатываю сайты только на битриксе, и для данной задачи всегда используется связка одного файла htaccess + url_rewrite.php
Привет.
Все отлично работает. Но есть одно НО
Дописывание слеша мешает вот такому запросу
URL для запросов API
/bitrix/services/yandex.market/trading/marketplace/s1
URL для запросов API
Укажите URL-адрес, на который магазин принимает запросы от Яндекс Маркета. Рекомендуется указывать базовый URL, например: /marketplace/api. Для такого примера запрос POST /cart будет приходить на URL /marketplace/api/cart
Помогло, спасибо!