Файл .htaccess является конфигурационным файлом Apache. Он позволяет задать реакцию сервера на запросы пользователя, настроить кэширование и сжатие, а также разграничить доступ к различным разделам сайта,
Возможности, которые предоставляет htaccess для конфигурации сервера слишком велики, чтобы уместиться в одной статье, но мы не собираемся рассматривать все тонкости конфигурации Apache, а рассмотрим лишь базовые настройки .htaccess для уменьшения дубликатов страниц на сайте.
Во-первых, на сайте имеется дубликат главного зеркала, сайт открывается как с www, так и без него.
Такое положение дел плохо тем что:
- Путает пользователя относительно правильности названия сайта
- Ухудшает запоминание название сайта пользователем
- Мешает поисковым роботам адекватно воспринимать страница сайта (поисковые роботы считают страницы с www и без www разными, а контент на них дублируемым)
Для избавления от дубликата главного зеркала в .htaccess необходимо прописать:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^crazysquirrel\.ru$ [NC]
RewriteRule ^(.*)$ https://crazysquirrel.ru/$1 [R=301,L]
Для настройки в качестве основного зеркала сайта название без www
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.crazysquirrel\.ru$ [NC]
RewriteRule ^(.*)$ https://www.crazysquirrel.ru/$1 [R=301,L]
Для настройки в качестве основного зеркала названия с www
Во-вторых, на сайте имеются дубликат головного файла сайта (index.html, index.php и т.д.)
Такое положение дел плохо тем что:
- Ухудшает вид основной страницы сайта (гораздо приятнее видеть имя сайта без всяких index нежели сними)
- Мешает поисковым роботам адекватно воспринимать страница сайта (поисковые роботы считают адрес сайта с index и без него как разные страницы, а контент на них дублируемым)
Для избавления от дубликатов головного файла сайта необходимо прописать в .htaccess:
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://crazysquirrel.ru/$1 [R=301,L]
В-третьих, дубликаты GET (параметров передаваемых в url после знака ?)
Такое положение дел плохо тем что:
- Ухудшает вид основной страницы сайта (гораздо приятнее видеть URL без GET параметров нежели сними)
- Мешает поисковым роботам адекватно воспринимать страница сайта (поисковые роботы считают адрес сайта с GET и без него как разные страницы, а контент на них дублируемым)
Для избавления от дубликатов GET необходимо прописать в .htaccess:
RewriteEngine on
RewriteCond %{QUERY_STRING} !^$ [NC]
RewriteCond %{THE_REQUEST} \? [NC]
RewriteCond %{THE_REQUEST} !admin [NC]
RewriteRule ^(.*)?(.*)$ https://crazysquirrel.ru/$1? [R=301,L]
Общее правило для избавления от дубликатов:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^crazysquirrel\.ru$ [NC]
RewriteRule ^(.*)$ https://crazysquirrel.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://crazysquirrel.ru/$1 [R=301,L]
RewriteCond %{QUERY_STRING} !^$ [NC]
RewriteCond %{THE_REQUEST} \? [NC]
RewriteCond %{THE_REQUEST} !admin [NC]
RewriteRule ^(.*)?(.*)$ https://crazysquirrel.ru/$1? [R=301,L]
В данных конфигурациях:
- RewriteEngine on — директива включения/выключения механизма преобразования (пишется одна на весь htaccess)
- RewriteCond %{HTTP_HOST} !^crazysquirrel\.ru$ [NC] — определение условия для применения преобразования только к названиям сайта, отличным от нужного
- RewriteRule ^(.*)$ https://crazysquirrel.ru/$1 [R=301,L] — механизм преобразования перенаправляющий пользователя на «правильное имя сайта»
- RewriteCond %{QUERY_STRING} !^$ [NC] — определяет условие для применения преобразования только к адресам у которых есть GET параметры
- RewriteCond %{THE_REQUEST} ? [NC] — определяет условие преобразования только для адресов имеющим ?
- RewriteCond %{THE_REQUEST} !admin [NC] — определяет правила преобразования для адресов не имеющим в своем составе дирректории или файла административной панели сайта (если на сайте нет CMS или для её работы не требуются GET параметры, данную строчку можно не писать)
- crazysquirrel.ru — название сайта
- admin — директория административной панели сайта
- index.php — главный файл сайта
- R=301 — флаг, устанавливающий код состояния http для неправильного сайта (301 — флаг постоянной смены адреса)
- L — флаг, указывающий, что данное правило последнее
- NC — флаг, указывающий, что для данного правила не важен регистр написания