Інструкція для веб-майстрів: секрети налаштувань файлу .htaccess

Файл .htaccess – це файл для додаткових налаштувань web-сервера Apache. Правила в .htaccess застосовуються для каталогу, в якому він створений, і для всіх його підкаталогів. Це дозволяє додати правила як для всього сайту, так і для конкретного каталогу. Як можна помітити, ім’я даного файлу починається з крапки, що в unix-системах вказує на те, що файл є прихованим.

Основними перевагами налаштувань в .htaccess є:

  • можливість користувача самому налаштувати потрібні правила web-сервера для сайту, не маючи доступу суперкористувача;
  • налаштування в даному файлі застосовуються миттєво, без перезавантаження будь-якої служби;
  • оскільки правила .htaccess працюють тільки для поточного каталогу і його підкаталогів, помилки в його синтаксисі не впливають на інші сайти і на роботу web-сервера в цілому.

З мінусів .htaccess можна відзначити не дуже доброзичливий синтаксис, який для початківців може бути досить складним. Тому в даній статті ми розглянемо основні директиви файлу .htaccess і приклади правил із ними, які зможе використовувати будь-який користувач без особливих знань в синтаксисі .htaccess.

Переспрямування с http на https

Для перенаправлення всіх сторінок сайту з http на https досить додати таке правило в початок файлу .htaccess, який розташований в кореневій папці сайту:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !robots.txt$
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Обмеження доступу до сайту

Цим правилом ми заборонимо доступ сайту або директорії сайту, де розташований файл .htaccess з подібними правилами, для всіх, крім IP-адреси 123.123.123.123. За аналогією можна вказувати кілька рядків з IP, яким доступ потрібно дозволити:

Require all denied
Require ip 123.123.123.123

Даним правилом ми навпаки закриваємо доступ для конкретної IP-адреси 123.123.123.123:

Require all granted
Require not ip 123.123.123.123

Обмеження доступу до конкретного файлу, в прикладі файл cron.php:

<Files "cron.php">
Require all denied
Require ip 123.123.123.123
</Files>

Якщо вищевказаних директив немає, то за допомогою файлу .htaccess доступ до сайту не обмежується.

Перенаправлення 301

Перенаправлення 301 з головної сторінки сайту на URL http://your_site.ua можна зробити таким чином. В цьому прикладі і наступних замість your_site.ua потрібно вказати ім’я вашого сайту або потрібний URL.

Redirect 301 / http://your_site.ua

Можна також використовувати це правило для будь-якої директорії сайту: для цього замість / вказуємо потрібну директорію, наприклад, /my_dir.

Redirect 301 /my_dir http://your_site.ua

Наступне правило використовується для перенаправлення всіх сторінок домену your_site.ua на відповідні сторінки іншого домену your_new_site.ua. Дане правило потрібно додати в .htaccess сайту, зі сторінок якого повинен бути редирект, в прикладі це your_site.ua:

RewriteCond %{HTTP_HOST} ^www\.your_site\.ua$ [NC]
RewriteRule ^(.*)$ http://your_new_site.ua/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^your_site\.ua$ [NC]
RewriteRule ^(.*)$ http://your_new_site.ua/$1 [L,R=301]

За аналогією з попереднім правилом можна зробити переспрямування з усіх сторінок www.your_site.ua на такі ж сторінки your_site.ua, тобто це редирект з www на без www:

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

І навпаки, з без www на таку ж сторінку з www:

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

Це правило допоможе позбутися від .html в кінці URL сторінки:

RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R=301]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]

Ще можна прибрати / в кінці URL:

RewriteEngine on
RewriteRule (.+)/$ /$1 [L,R=301]

Або додати / в кінці URL, який не закінчуються на /:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

Кодування сайту

У .htaccess також можна примусово встановити кодування для сайту використовуючи директиву AddDefaultCharset і передаючи їй один параметр – бажане кодування, наприклад:

AddDefaultCharset UTF-8

або

AddDefaultCharset WINDOWS-1251

Або можна відключити установку кодування web-сервером використовуючи директиву:

CharsetDisable on

Перепризначення сторінок помилок

Ці правила замінять стандартні сторінки помилок на зазначені користувацькі. Посилання http://your_site.ua/error_page_404.html та інші потрібно замінити на ваші посилання сторінок помилок:

ErrorDocument 404 http://your_site.ua/error_page_404.html
ErrorDocument 403 http://your_site.ua/error_page_403.html
ErrorDocument 500 http://your_site.ua/error_page_500.html

Встановлення нестандартного індексного файлу

При відкритті будь-якого веб-сайту сервер шукає в кореневій папці індексний файл, який за замовчуванням заданий як index.php або index.html. У разі, якщо наш індексний файл відрізняється від заданих за замовчуванням, і називається, наприклад, main.php, ми можемо це вказати в .htaccess директивою:

DirectoryIndex main.php

Вывод

У даній статті розглянуті приклади найбільш використовуваних правил .htaccess, які будуть корисні як і досвідченому розробнику, так і новачкові в цій сфері. Але це далеко не всі можливості конфігурації в .htaccess. Сьогодні використання файлу .htaccess не є великою проблемою, оскільки практично всі хостинги в своєму програмному забезпеченні використовують Apache і підтримують можливість налаштування за допомогою .htaccess. Тому ця тема вже багато років залишається актуальною і інформацію про це легко можна знайти на багатьох інтернет ресурсах. Якщо виникає завдання що-небудь налаштувати за допомогою .htaccess – швидше за все це вже хтось робив, – і можна просто знайти готове рішення. Якщо ж реалізувати потрібну опцію .htaccess вам не вдалося, звертайтеся в нашу підтримку і ми знайдемо рішення разом.