Файл .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 — прапор, який вказує, що для даного правила не важливий регістр написання