Настройка файла .htaccess для 1С-Битрикс

Настройка файла .htaccess для 1С-Битрикс

Чтобы избежать проблем с поисковыми системами для вашего сайта, после сдачи проекта на Битрикс, проверьте правильно ли сконфигурирован файл .htaccess. Это позволит избежать вам дублей страниц, сделать редирект с http на https и т.д.

Ниже покажу что я добавляю к стандартному файлу .htaccess для 1С-Битрикс в каждом проекте.

Весь код мы размещаем внутри секции <IfModule mod_rewrite.c> ниже правил :

Options +FollowSymLinks
RewriteEngine On

Для того чтобы избежать дублей страниц, добавляем слеш в конце адресов. Теперь страницы не будут доступны по двум адресам site.ru/product и site.ru/product/ , будет только вариант с / на конце url.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)(?<!/)$ /$1/ [R=301,L]

Так же я всегда делаю переадресацию с домена с WWW на домен без WWW.

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Даже если в Битриксе включены ЧПУ, страницы все равно доступны с index.php на конце (site.ru/product/ и site.ru/product/index.php). Избавимся и от этого дублирования.

RewriteCond %{REQUEST_FILENAME} ^(.*)/index\.php$
RewriteRule ^(.*)index\.php(.*)$ /$1$2 [R=301,L]

И напоследок добавим переадресацию с http на https (на разных хостингах она может настраиваться по разному, в данном случае точно работает на reg.ru).

RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Вот мой итоговый файл .htaccess для Bitrix:

Options -Indexes 
ErrorDocument 404 /404.php

<IfModule mod_php5.c>
	php_flag allow_call_time_pass_reference 1
	php_flag session.use_trans_sid off

	#php_value display_errors 1

	#php_value mbstring.internal_encoding UTF-8
</IfModule>

<IfModule mod_rewrite.c>
	Options +FollowSymLinks
	RewriteEngine On

	RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^([^.]+)(?<!/)$ /$1/ [R=301,L]

        RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
        RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

        RewriteCond %{REQUEST_FILENAME} ^(.*)/index\.php$
        RewriteRule ^(.*)index\.php(.*)$ /$1$2 [R=301,L]
    
        RewriteCond %{ENV:HTTPS} !on
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
	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>

<IfModule mod_dir.c>
	DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_expires.c>
	ExpiresActive on
	ExpiresByType image/jpeg "access plus 3 day"
	ExpiresByType image/gif "access plus 3 day"
</IfModule>

p.s.

Когда тестировал переадресацию с http на https в инфоблоках, у меня постоянно шла переадресация на /bitrix/urlrewrite.php думал, что где-то неправильно настраиваю.

Проверил работоспособность переадресации в режиме Инкогнито, увидел что все работает, поэтому все тесты лучше всегда проводить в режиме Инкогнито.

Что это было и почему так, разбираться не хочу.

Хостинг для ваших проектов

Возможно, вас заинтересует

Получить ID элемента инфоблока вне шаблона компонента

На клиентском сайте использующем Битрикс, появилась задача получить ID текущего элемента инфоблока …