Налаштування .htaccess

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