htaccess – избавляемся от дублей

Избавимся от основных причин возникновения дублей на сайте.

Битрикс – как убрать дубли на сайте при помощи htaccess

Какие наиболее частые дубли возникают на сайтах?

  • Редирект с http на https
  • Редирект с www на без www
  • Редирект без “/” на /
  • Редирект c index.php на раздел
  • Редирект с index.html на раздел

Давайте рассмотрим каждый из них.

Редирект с http на https

Сейчас уже сложно встретить сайт без защищенного протокола, однако они есть. Если этот редирект не настроен через ваш хостинг, то напишите в поддержку, т.к. чаще всего он выставляется именно так. Вариант через htaccess лучше использовать в крайнем случае.

Редирект с www на без www

Пишется очень просто, и выглядит так:

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

Стоит заметить, что есть сайты которым нужен обратный редирект без ввв на ввв.

Редирект без “/” на /

Добавляем слеш в конце на разделах, у которых его нет:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://site.ru/$1/ [L,R=301]

Редирект c index.php на раздел

Вариантов написать такой редирект несколько, на одном из проектов сработал такой:

RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_URI} ^(.*)/index.php$
RewriteRule ^(.*)$ %1/ [R=301,L]

Редирект с index.html на раздел

RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_URI} ^(.*)/index.html$
RewriteRule ^(.*)$ %1/ [R=301,L]

Воспользуемся примером выше и напишем точно такой же, только для “.html”.

Полный фрагмент файла выглядит так:

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

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

# to slash /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://site.ru/$1/ [L,R=301]

# index.php
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_URI} ^(.*)/index.php$
RewriteRule ^(.*)$ %1/ [R=301,L]

# index.html
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond %{REQUEST_URI} ^(.*)/index.html$
RewriteRule ^(.*)$ %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>

Для всех других ошибочных страниц у вас должна корректно работать ошибка 404 и специальный статус Not Found.

Если на вашем сайте необходимо убрать дубли страниц, обращайтесь ко мне за помощью

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *