Що таке .htaccess?
Файл .htaccess – це конфігураційний файл, який використовується на веб-серверах Apache для керування правилами доступу, редиректами, кешуванням і безпекою без втручання в основний код сайту.
У цій статті ми пояснимо, як працює .htaccess, навіщо він потрібен і як його можна використовувати для гнучкого налаштування сайту. Допомагаємо серверу Apache підібрати редиректи та керувати правами користувачів.
Веб-сервер – посередник між користувачем і сайтом – або, точніше, даними на ньому. Людина надсилає запит на сервер, щоб отримати вміст потрібної сторінки. А сервер обробляє ці запити, знаходить відповідні файли і повертає їх. І цей процес повторюється доти, доки людина не закриє сторінку.
Але іноді дані – наприклад, паролі або доступ до адмін-панелі – користувачеві за запитом віддавати не слід. Тому для безпеки на сервері визначають права доступу, яких той суворо дотримується. Один зі способів визначити права доступу – створити файл .htaccess. Про нього сьогодні й поговоримо.
Файл .htaccess
.htaccess – це файл конфігурації веб-сервера Apache. Він потрібен, щоб змінювати його налаштування – наприклад, перенаправляти користувача на інші сторінки сайту або забороняти доступ до окремих папок.
Взагалі, для глобальних конфігурацій у Apache є спеціальний файл – httpd.conf. У ньому можна встановити правила обробки запитів і запуску модулів Apache, визначивши те, які вони повинні приймати параметри і що повинні повертати у відповідь. Іншими словами, httpd.conf контролює все, що відбувається із сервером.
Але цей файл надто складний для простих розробників – для керування ним потрібно бути досвідченим системником. Якщо неправильно вказати налаштування, то сервер не працюватиме і користувачі не зможуть зайти на сайт. Тому творці Apache придумали інший спосіб змінювати конфігурацію сервера, не боячись його критичної поломки, – за допомогою файлів .htaccess.
.htaccess можна створити в будь-якій папці на сервері. Його правила поширюватимуться на все, що перебуває всередині цієї директорії: файли та підпапки, тобто діятимуть локально. Нові правила тимчасово перепишуть глобальні налаштування з httpd.conf і діятимуть тільки там, де створено файл.
Якщо в папці вже є файл .htaccess, але нам потрібно створити ще один у вкладеній папці, то пріоритет налаштувань зміниться. Нові конфігурації замінять правила, які задані на рівень вище – у першому .htaccess-файлі.
Для кожного рівня – свої налаштування з файлу .htaccess. Наприклад, у папці Server ми можемо вказати, що доступ до вкладеної папки Frontend мають тільки фронтендери, а до Backend – тільки бекендери. Тепер у відповідні папки зможуть потрапити користувачі тільки з певними логінами. Усередині цих папок можна задати інші локальні налаштування. При цьому головний файл httpd.conf залишиться без змін і сервер точно працюватиме.
Навіщо потрібен .htaccess
Найчастіше файл .htaccess використовують, якщо потрібно:
- налаштувати редирект;
- видати і визначити права для користувачів;
- вказати послідовність дій у разі помилок на сервері.
Поговоримо про кожен випадок докладніше.
Редирект
Використовується для перенаправлення користувачів з однієї сторінки на іншу. Уявіть, що у нас є головна сторінка сайту – index.html. Але її довелося переробити, і з’явилася нова – new_index.html.
Поки сторінка перебуває у стадії тестування, ми хочемо показувати її лише половині користувачів, щоб перевірити функціональність та їхню задоволеність змінами. Тому нам потрібно зробити так, щоб, коли людина заходить на сторінку index.html, її перенаправляло на new_index.html. Вказати це можна якраз у файлі .htaccess.
Доступи
За допомогою .htaccess можна обмежити доступ до окремих папок або файлів, блокувати користувачів за IP-адресами і додавати на сторінки сайту авторизацію через логін і пароль.
На нову сторінку сайту можна додати авторизацію. Навіть якщо користувачі якось дізнаються, що ми розробляємо нову версію головної сторінки, то їх попросять ввести логін і пароль, який знаємо тільки ми та інша вибірка користувачів.
Помилки
Щоб сервер працював коректно, йому потрібно вказати, що робити під час виникнення помилок – наприклад, помилки 404. Для цього у файлі .htaccess є спеціальні налаштування.
Уявіть, що користувач заходить на сторінку, якої взагалі немає, – наприклад, на free_money.html. Браузер за замовчуванням видасть йому дефолтну сторінку з помилкою 404: «Запитувана сторінка не знайдена». Але ми можемо переналаштувати це – і вказати, щоб сервер перенаправляв користувача на головну сторінку або на нашу власну сторінку з повідомленням про помилку 404 і корисною інформацією.
Як редагувати файл .htaccess
Для початку дізнаємося, як знайти .htaccess. Зробити це просто – потрібно зайти в кореневу папку сервера і ввімкнути показ прихованих файлів. Щоб зробити це на Windows, читайте офіційний посібник, а в редакторах коду зазвичай нічого робити не потрібно – файли видно і так.
Якщо файлу .htaccess немає, значить, його потрібно створити самостійно. Для цього в кореневій папці сервера створіть файл із назвою .htaccess. Він буде порожній, але так і потрібно.
Тепер усе готово. Тепер ми можемо вказувати власні налаштування для сервера. Тому відкриємо файл і почнемо його редагувати.
Важливо! Не відкривайте .htaccess за допомогою «Блокнота», якщо використовуєте Windows. Так у файл запишуться додаткові символи, які сервер Apache може обробити неправильно. Найкраще редагувати файл через консоль або Notepad++.
Далі в статті ми розберемо основні налаштування для .htaccess. Будемо писати все з нуля, але якщо вам потрібен «універсальний» файл із конфігураціями, то скопіюйте вміст цього файлу у ваш .htaccess.
Як налаштувати файл .htaccess
Подивимося, як працювати з .htaccess-файлом і налаштовувати сервер для своїх потреб. Ось список усього, що ми розберемо нижче:
- головна сторінка за замовчуванням;
- редиректи;
- заміна протоколу HTTP на HTTPS;
- заміна адреси із вказівником WWW на адресу без нього;
- обмеження доступів;
- базова аутентифікація;
- обмеження запитів;
- сторінки помилок;
- кодування.
Це найпопулярніші налаштування. Можете знайти потрібні, скопіювати, але поміняти адресу сайту і назви сторінок. Усе має працювати.
Головна сторінка за замовчуванням
Згадаймо приклад: ми хочемо замінити стару головну сторінку сайту на нову – new_index.html.
Ця команда перенаправлятиме всіх користувачів зі сторінки index.html на сторінку new_index.html. Бачите, як усе просто.
Ще можна вказати кілька сторінок для редиректу – якщо одна з них не завантажиться. Давайте зробимо так: перенаправимо користувача на нову сторінку, а якщо вона раптом не завантажиться.
Список можна продовжити будь-якою кількістю сторінок через пробіли.
Редиректи
Тепер давайте розберемося з перенаправленням користувачів з однієї сторінки на іншу. Процес схожий на заміну головної сторінки – тільки з трохи іншою конфігурацією.
Напишемо редирект, який переводитиме зі сторінки profile.html на my.html. Уявіть, що це якась соціальна мережа, де профіль користувача переїхав у новий інтерфейс.
Розберемо все по порядку:
- RewriteEngine On – це функція, яка ввімкнена за замовчуванням на більшості сучасних веб-серверів, включно з Apache. Вона дає змогу виконати додаткові дії під час обробки URL-адрес: наприклад, проаналізувати ці адреси, щоб знайти потрібні символи.
- RewriteRule – це команда, яка встановлює перенаправлення з URL-адреси profile.html на URL-адресу my.html.
Зауважте, що в другому рядку ми використовували регулярні вирази. Якщо коротко, це набір правил і шаблонів для пошуку або заміни підрядків у тексті. Нам вони потрібні, щоб виділити всі URL-адреси, в яких є слово «profile».
Заміна протоколу HTTP на HTTPS
Бувають ситуації, коли сайт спочатку поставили на протокол HTTP, а потім власники вирішили перейти на HTTPS. Зробили вони це для шифрування та безпечного передавання даних між користувачем і сервером.
Але деякі користувачі вже могли звикнути до старої адреси сайту – тому їх потрібно перенаправити на нову адресу.
Розбираємося в кожному рядку:
- RewriteCond %{HTTPS} off – спочатку перевіряємо, що є на сайті без HTTPS. Якщо значення дорівнює off, то виконується наступна команда.
- RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] – вказуємо, що потрібно перенаправити всі URL-адреси, що відповідають певному шаблону, на потрібний протокол: https://%{HTTP_HOST}%{REQUEST_URI}. Це означає, що якщо сервер отримує запит на URL-адресу http://example.com/, то він має перенаправити його на кінцеву точку https://example.com/.
Заміна www і назад
На один і той самий сайт можна зайти за різними посиланнями. Усі вони однаково коректні в плані синтаксису, але для пошукових роботів це різні сторінки, що неправильно. Для вирішення проблеми потрібно переводити користувача на якусь одну сторінку, і найчастіше на ту, де найменше символів.
Обмеження доступів
Для Apache є дві команди обмеження доступу до сайту – Order Allow,Deny і Require. У нових версіях веб-сервера, починаючи з 2.4, бажано використовувати другу.
За допомогою цих команд можна пускати на сайт людей тільки з певною IP-адресою.
Щоб, навпаки, заборонити конкретним користувачам відвідувати сайт, можна заблокувати їхні IP-адреси.
Видавати доступ можна не тільки до сайту цілком, а й до окремих сторінок.
У першому випадку ми заборонили доступ усім IP-адресам, крім однієї. А в другому випадку – дозволили доступ усім, крім тієї ж IP-адреси.
Базова автентифікація
Щоб зробити сайт або окремі сторінки доступними тільки після автентифікації – введення логіна і пароля, потрібно вписати такі команди.
Тут ми використовуємо базову SSH-аутентифікацію. Для неї потрібна захищена паролем папка Authentication Folder (назвати можна по-іншому), а також файл .htpasswd. Далі слід вказати, що доступ є тільки в авторизованих користувачів.
Якщо у вас ще не налаштований SSH, потрібно ввести таку команду в командному рядку в кореневій папці сервера.
Замість «логін» і «пароль» введіть свої логін і пароль. Після виконання команди у вас з’явиться файл .htpasswd.
Обмеження запитів
Ми можемо дозволяти або забороняти певні види HTTP-запитів. Наприклад, іноді потрібно заборонити користувачам завантажувати файли на сервер, але зберегти доступ до їхнього скачування.
Розглянемо на прикладі запитів GET, POST і HEAD.
Ось які запити ми використовували:
- GET – запит на отримання даних із сервера;
- POST – запит на надсилання даних на сервер;
- HEAD – запит на надсилання тільки заголовків; наприклад, щоб перевірити доступність сервера.
Тут ми вибираємо запити за допомогою команди Limit і дозволяємо тільки їх.
Сторінки помилок
Коли на сайті виникає помилка – наприклад, 404 або «сторінка не знайдена», – ми можемо перенаправити користувача на створену нами сторінку з описом цієї помилки. Уявіть, що ми зробили окрему сторінку 404.html:
Усе просто. Головне – щоб сторінка перебувала в тій самій папці, де лежить файл .htaccess.
Кодування
Щоб вказати кодування для всього сайту, потрібно ввести таку команду: AddDefaultCharset
Що запам’ятати
Давайте резюмуємо все, що дізналися про файл .htaccess і його використання:
- Файл потрібен, щоб задавати конфігурацію для веб-серверів Apache.
- Зазвичай за допомогою .htaccess налаштовують редирект, видають права доступу і задають алгоритм дій для сервера в разі виникнення помилок.
- Виглядає він як звичайний текстовий файл, але в ньому міститься код з унікальним синтаксисом.
- Щоб редагувати .htaccess, використовуйте консоль або редактор Notepad++.
Висновок
.htaccess дає змогу тонко керувати сайтом без редагування серверної конфігурації.
Його можливості особливо корисні тим, хто хоче мати контроль над поведінкою ресурсу з мінімальними зусиллями. Завдяки йому можна налаштувати перенаправлення, обмежити доступ до окремих сторінок, увімкнути HTTPS або приховати структуру каталогу.








