Настройка файла .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 думал, что где-то неправильно настраиваю.

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

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

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