Apache: налаштування веб-сервера, файл .htaccess
Apache: налаштування веб-сервера, файл .htaccess
1. Що таке Apache?
Веб-сервер Apache використовується у нас на хостингу як основний. Apache є основою більшості веб-серверів світу і являється найбільш розповсюдженим веб-сервером. Причинами його популярності є такі факти як легка і широка можливість конфігурації, швидкодія, підтримка всіх нині відових протоколів. Спеціально для Apache були створені версії популярних мов програмування як Perl та PHP, а також цей веб-сервер легко інтегрується з розповсюдженими СУБД як MySQL.
Користувачі нашого хостингу мають можливість власноруч редагувати конфігурації Apache за допомогою відповідних дериктив в файлі .htaccess. Таким чином можна вирішити більшість задач конфігурації веб-сервера в умовах shared-хостингу.
Для ознайомлення конфіграції Apache рекомендуємо читати документації на офіційному сайті - http://httpd.apache.org/docs/
2. Файл .htaccess.
Файл .htaccess використовується для управління веб-сервером Apache зі сторони користувача хостингу. Цей файл складається з директив, які веб-сервер аналізує і опрацьовує, виконуюючи дії відповідно до цих директив.
Файл .htaccess може бути розміщений як в кореневому каталозі так і в будь-якому його підкаталозі. Якщо файл .htaccess знаходиться в підкаталозі, то його директиви перекривають директиви файлу, який знаходиться в каталозі вище. Зміни файлу вступають у дію відразу ж, тому що при кожному звернені веб-сервер перечитує його зміст.
Зверніть увагу, що на початку назви файлу стоїть крапка, яку опускати не можна. В unix-подібних системах це означає, що файл є прихованим.
Якщо використання деякої директиви призвело до появи помилок або просто збою роботи сайту, наймовірніше ви прописали інструкцію, яка заборонена в умавах shared-хостингу. В такому випадку зверніться до support@hvosting.ua і ми спробуємо вирішити вашу проблему.
3.Приклад використання директив
3.1.Перевизначення кодування html-документу
Якщо вам потрібно, щоб веб-сервер "віддавав" всі html-документи в кодуванні koi8-r, а не в windows-1251(cp1251), як це сервер робить за замовчуванням, то потрібно у файл .htaccess помістити наступну інструкцію:
AddType "text/html; charset=koi8-r" .html .htm .shtml
Якщо на вашому ресурсі існують html-документи в різних кодуваннях (ISO-8859-1, Windows-1250, Windows-1252, UTF-8), то вам, можливо, буде необхідно примусово відключить видачу заголовка з кодуванням windows-1251. Для цього треба прописати наступну директиву:
AddDefaultCharset Off
Але в такому випадку відповідне кодування має бути прописаним на кожній html-сторінці у вигляді тега
<http-equiv="Content-type" content="text/html; charset=windows-1251" />
3.2. Захист директорії паролем
Бувають ситуації, коли директорію потрібно захистити від небажаних відвідувачів, наприклад адміністративну частину сайту. Це штатна ситуація, яку вирішується за допомогою файлу .htaccess.
В каталозі, доступ до якого ви хочете обмежити до файлу .htaccess (якщо його немає, то створюємо) додаємо наступні інструкції:
AuthType Basic
AuthName "Some Name"
AuthUserFile /home/example/data/.htpasswd
require valid-user
Шлях /home/example/data/.htpasswd є повним шляхом до файлу паролів на диску вашого серверу. Якщо ви, наприклад, помістите файл .htpasswd в домашній каталог, куди ви потрапляєте, заходячи по фтп, то шлях до файлу матиме саме вище вказаний шлях, де замість example має бути ваш хостинг-аккаунт.
Отже, в директиві AuthUserFile ми вказуємо абсолютний шлях до файлу .htpasswd, який містить логіни і паролі. Якщо ви створюєте файл .htaccess на своєму локальному комп'ютері, а не на нашому сервері, то передавати його по FTP обов'язково потрібно в текстовому (ASCII) режимі.
Файл .htpasswd зберігає дані рядками у вигляді: login:password. Пароль має бути зашифрованим з використанням алгоритму MD5. Один з варіантів створити такий файл - скористуватися програмою, яка входить в дистрибутив Apache - htpasswd.
Розглянемо приклади використання ціє команди в unix shell.
htpasswd -m .htpasswd user
Ця команда запитає у вас пароль і після цього внесе дані до файлу. Якщо файл .htpasswd ще не був створений, то потрібно додати ключ -c, але будьте обережні, якщо файл вже був створений, а ви використали цей ключ, то файл перепишеться. Тобто маємо команду:
htpasswd -mc .htpasswd user
3.3. Індексний файл.
Індексний файл - це той файл, який відкривається за замовчуванням при звертанні клієнта до каталогу, а не до конкретного файлу. Наприклад, клієнт набере в браузері наступну URL-адресу: http://example.in.ua/ чи http://example.in.ua/admin , де в першому випадку звертання йде до каталогу сайту, а в другому - до каталогу admin, який знаходиться безпосередньо в каталозі сайту, тобто файл в запиті не вказано. В такому випадку буде запущено на виконання індекний файл, результат його виконання й буде відправлено клієнту на його запит.
За замовчуванням індесним файлом є: index.html, index.htm, index.php, index.php3, index.phtml, index.shtml, default.htm або default.html. Але якщо у вас є бажання його перевизначити, наприклад на myindex.php, то вам в файлі .htaccess необхідно прописати наступну директиву (інструкцію):
DirectoryIndex myindex.php
3.4. Заборона та дозвіл лістингу файлів.
Бувають випадки, коли потрібно виводити список файлів в папці за відсутності визначення індесного файлу. Для цього достатньо прописати в .htaccess наступну інструкцію:
Options +Indexes
Цю інструкцію потрібно написати саме в тій папці, в якій ви плануєте дозволити лістинг. Дана інстуркція також буде дійсна для всіх підкаталогів, якщо у підкаталозі потрібно вимкнути лістинг, потрібно прописати інструкцію
Options -Indexes
Варто відмітити, що остання інструкція є за замовчуванням, якщо в директорії вище не зазначено протилежного. Коли ввімкнена опція -Indexes і індексний файл не вказаний сервер видає HTTP помилку 403.
3.5. Власні сторінки помилок.
Іноді відвідувачі вашого сайту запитують такі сторінки, яких на сервері немає по різноманітним причинам: чи то їхнє посилання не правильне, чи файли дійсно було помилково видалено. В такому випадку сервер видає наступну відповідь:
Але .htaccess надає альтернативу цим сторінкам.
3.6. Відмова в доступі певним IP-адресам.
Коли виникає необхідність заборонити доступ до сайту, або його частини, для певних IP-адресів пишемо наступні директиви:
Order Allow,Deny
Allow from All
Deny from 172.16.16.16
Тут відмовлюємо в доступі 172.16.16.16. Якщо буде здійснений запит з цієї адреси у відповідь сервер видасть 403 помилку або відповідну цій помилці вашу сторінку.
Якщо ви напишете адресу 172.16.16, то це означає заборонити доступ для всієї підмережі 172.16.16/24.
3.7. Відмова в доступі до певних файлів.
Також іноді виникає необхідність заборонити доступ до деяких файлів, наприклад до конфігураційних файлів, яка містять реквізити доступу до баз даних, інтерфейсів тощо. Нехай такий файл у вас config.cfg, тоді пишемо наступне:
<FilesMatch "\.(cfg)$">
Order allow,deny
Deny from all
</FilesMatch>
Тепер на запит цього файлу сервер відповість 403 помилкою або відповідною цій помилці вашою сторінкою.
3.8 Заголовок last-modified
Виникають ситуації коли потрібно, щоб веб-сервер видавав HTTP-заголовок Last-Modified. Наприклад, при реєстрації вашого ресурсу на Яндексі, виникає помилка "Неправильні дати". Для статистичних документів сервер буде видавати значення last-modified завжди. Це діє на html-файли. Для SSI cервер буде видавати значення last-modified лише тоді, коли прописана директива «XBitHack full» (просто пропишіть цей рядок в .htaccess), і для файлу, до якого звертаються виставіть права на виконання для групи. В скріптах last-modified видається іншими методами. Наприклад, враховуючи динамічне генерування коду php-скріптом, то логічно в якості last-modified віддавати поточну дату і час. Ось приклад реалізації:
<? header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); ?>
Варто звернути увагу на те, що команда header в обов'язковому порядку має виконуватись в скріпті до того, як скріпт почне видавати html-текст в браузер користувача.
3.9. Створення переадресації.
Якщо у вас є домени (необов'язково, щоб вони хостились разом) domain1.tld та domain2.tld, і вам потрібно, щоб при звертанні до domain2.tld відбувалось перенаправлення, то пропишіть наступне для домену domain2.tld:
Redirect 301 / http://domain1.tld/
*налаштування вказані для показового домену example.in.ua на сервері h56.hvosting.ua (аккаунт під назвою example), при роботі з хостингом використовуйте свої дані.