Почнемо здалеку, щоби принцип роботи цього файлу був зрозумілий навіть новачкам. Для функціонування сайту в Інтернеті потрібен не тільки комп’ютер і вихід до мережі, але й встановлене на нього спеціальне програмне забезпечення, що забезпечує доступ до даних за протоколами http і https. Таким програмним забезпеченням і є веб-сервер. Існують різні типи веб-серверів, але найбільш поширений — Apache. Він використовує відкритий код, надається безкоштовно, постійно допрацьовується і поліпшується, підтримує більшість скриптів і працює майже на всіх платформах, у тому числі на Windows, Linux, Netware 5.x.

Налаштовують Apache у конфігураційних файлах, які зберігають у текстовому форматі. У цих файлах можна задати певні правила дії веб-сервера. Головний конфігураційний файл має назву httpd.conf або apache.conf (в залежності від дистрибутива ОС). У багатьох випадках усі конфігурації сервера можна вказувати саме тут, і в основному такий спосіб краще, тому що:

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

Але доступ до цього файлу може бути не в усіх користувачів сервера (наприклад, у випадку з віртуальним хостингом), тому їм доводиться використовувати файл додаткової конфігурації веб-сервера — .htaccess (з крапкою на початку назви).

Зміст

Що таке .htaccess і для чого він потрібен

Файл (або файли) .htaccess буде встановлювати правила роботи веб-сервера тільки у тому каталозі, де він розміщений, і каталогах, що йому підпорядковуються, без глобальних змін роботи всього сервера. Можливість використовувати .htaccess активує директива (тобто команда) AllowOverride у головному конфігураційному файлі httpd.conf, назва якої прямо говорить про те, що налаштування всередині .htaccess мають вищий пріоритет ніж налаштування у httpd.conf (якщо та сама директива AllowOverride не зазначає інше). За допомогою цієї директиви можна дозволити все, а можна — тільки деякі дії. Детальну інструкцію по її застосуванню можна знайти на сайті Apache.

З нею, при кожному зверненні до веб-сервера, Apache буде переглядати всі каталоги на наявність .htaccess. Зміни у файлі набувають чинності одразу після збереження змін — перезавантаження всього веб-сервера не потрібне (на відміну від змін в httpd.conf).

Ім’я файлу .htaccess – загальноприйняте, але зовсім не обов’язкове. В httpd.conf можна вказати інше ім’я за допомогою директиви AccessFileName, наприклад, так:

AccessFileName .config

Як створити файл .htaccess

Як вже говорилося, конфігураційні файли мають текстовий формат, і створити .htaccess також можна за допомогою текстового редактора (наприклад, Блокнота або NotePad++ у Windows).

Ім’я файлу — .htaccess (з крапкою на початку);

тип — «Усі файли»;

формат перенесення по словах;

режим ASCII (при завантаженні .htaccess на хостинг за FTP-протоколом).

Apache — чутливий до регістру веб-сервер, тому важливо вказати назву маленькими літерами: .HTaccess и .htaccess — це різні файли.

В Mac ОS файли, які починаються з крапки, невидимі. Тому буде зручніше назвати його якось інакше і змінити назву, після того як завантажите його на хостинг. Зазвичай файл розміщують в кореневому каталозі веб-сервера (/public_html) або в кореневому каталозі сайту (/public_html/site.com/).

Синтаксис .htaccess

Синтаксис .htaccess такий самий як і синтаксис httpd.conf. Кожна директива починається з окремого рядка. Для зручності ви можете додати в файл коментарі за допомогою знака #, і веб-сервер буде ігнорувати значення після цього символа. Цей трюк можна використовувати, щоб вимкнути будь-яку директиву. Її не треба видаляти з файлу — достатньо просто закоментувати.

Можливості конфігураційного файлу величезні. Нижче наведемо базові налаштування .htaccess.

Можливості .htaccess

Контроль доступу

Заборона веб-доступу:

Order Deny,Allow
Deny from all

Заборона веб-доступу, окрім IP:

order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx

Заборона веб-доступу для IP:

Order allow,deny
Allow from all
Deny from xxx.xxx.xxx.xxx

Заборона доступу до файлу:

<Files private.html >
Order allow,deny
Deny from all

Захист директорії за допомогою пароля:

AuthType Basic     
AuthName "Directory Name"
AuthUserFile /home/cpanel_user/.htpasswds/public_html/smth/passwd
require valid-user

# де "Directory Name" — ім'я директорії, яку потрібно захистити, а 
# /home/cpanel_user/.htpasswds/public_html/smth/passwd — шлях до файлу passwd з логінами і паролями дозволених користувачів.
# У файлі повинні бути записи у вигляді користувач:пароль

Робота з помилками веб-сервера

Іноді замість очікуваної сторінки відвідувач може натрапити на відповідь веб-сервера у вигляді помилки з лаконічним, але не завжди зрозумілим звичайному користувачеві поясненням причини. Повний список кодів стану можна знайти у Вікіпедії. Для найпоширеніших (наприклад, 404 або 500 помилки) бажано створити свою сторінку, яка виглядає краще і надає відвідувачеві шляхи виходу. Налаштовується вона наступним чином:

ErrorDocument 404 http://yourdomain.com/error/404.html
# де http://yourdomain.com/error/404.html — шлях до створеної сторінки.  

P.S. Користувачі послуги хостинг сайту від HOSTiQ.ua можуть скористатися для створення своєї сторінки функціоналом контрольної панелі cPanel (у розділі «Розширений» пункт «Сторінки помилок»).

Налаштування 301 редиректа в .htaccess

Для створення постійного перенаправлення використовують 301 редирект, який передає всю вагу сторінки новому URL (тому для SEO він краще, ніж 302 редирект).

Перенаправлення всього сайту на новий домен:

Redirect 301 / http://www.newdomain.com/

Перенаправлення однієї сторінки на іншу:

Redirect 301 /page1.html http://mydomain.com/page2.html

Модуль перенаправлення mod_rewrite

Незамінним механізмом для зміни URL-посилань є модуль mod_rewrite. Його корисність, а разом з тим, складність полягає в тому, що можна використовувати безліч правил, які містять ще більше змінних.

Для роботи модуля потрібні такі директиви:

RewriteEngine On (вмикає роботу механізму перетворення)

Options FollowSymLinks (умова для роботи mod_rewrite).

Якщо адміністратор сервера вимкнув цю опцію для директорії користувача, то неможливо використовувати механізм перетворення. Таке обмеження встановлюють на серверах віртуального хостингу з метою безпеки.

Для подальшого ознайомлення з модулем радимо звернутися до першоджерела.

RewriteRule

Однією з найбільш функціональних директив модуля mod_rewrite є RewriteRule. Для того щоб вказати умову, за якої буде працювати правило, використовують директиву RewriteCond. Її (одну або декілька) обов’язково прописують перед RewriteRule.

Перенаправлення сторінки на новий домен:

RewriteRule ^page1\.html$ http://newdomain.com/ [R=301]

Перенаправлення сайту з домену без www на домен з www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\..* [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]

І навпаки:

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

Перенаправлення за протоколом HTTPS (попередньо потрібно встановити сертифікат HTTPS):

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

Ці рядки слід додати на самому початку файлу .htaccess.

Визначення кодування

Таблицю символів, в якій слід відкрити сайт, визначає браузер. Однак, можна задати кодування за замовчуванням:

AddDefaultCharset UTF-8

Така зміна працює в межах дії .htaccess і на всіх сторінках сайту. Можна задати кодування для певного типу файлу, наприклад windows-1251 для html:

AddType "application/x-httpd-php3; charset=windows-1251" .html

Часто сама сторінка несе в собі (а саме у заголовку) інформацію про кодування. Потрібно перевірити, щоб кодування у документі й конфігураційному файлі збігалися. Наведене тут кодування utf-8 практично завжди потрібне для роботи популярних cms, адже вони розраховані на велике коло користувачів у всьому світі. До речі, це ж кодування встановлене і на наших серверах віртуального хостингу за замовчуванням.

Інші можливості

– Визначити індексний файл сайту:

За замовчуванням індексною сторінкою вважається index.html. За допомогою наступної директиви можна задати інше ім’я файлу, який відкривається першим при зверненні до каталогу:

DirectoryIndex index.php

– Корисною директивою є FilesMatch, що встановлює межі дії правила по імені файлу за допомогою регулярних виразів. Цією директивою, наприклад, можна заборонити доступ до певних файлів:

<FilesMatch
"\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>

Є деякі директиви, які не можна вказати на наших серверах з віртуальним хостингом, але ви можете вказати їх на своєму VPS.

Причина в тому, що працює як suPHP веб-сервер не підтримує php_flag и php_value. Тому ми пропонуємо використовувати сPanel (вкрай корисний підрозділ «Вибір версії РНР», для роботи з error_log — «Журнал помилок») або створити локальний файл php.ini для цієї ж мети. Пару директив ми все-таки наведемо нижче:

– Щоб уникнути зависання веб-сервера під час обробки скриптів, які не працюють, існує директива max_execution_time. З її допомогою вказується час у секундах, який відведено на обробку РНР-скрипта. Можна збільшити час очікування веб-сервера при виконанні скрипта:

php_value max_execution_time 60

– Визначити максимальний розмір файлу:

php_value upload_max_filesize 128M  (тут замість 128 поставте потрібне значення).

– Вивести помилки РНР в окремий файл:

php_flag  log_errors on
php_value error_log  /home/path/to/public_html/domain/PHP_errors.log
# PHP_errors.log — назва файлу, а 
# /home/path/to/public_html/domain — шлях до нього).

P.S. На віртуальному хостингу важко точно визначити, які директиви будуть працювати в .htaccess, тому що багато з них заборонені, бо ведуть до зміни конфігурації веб-сервера, а це означає, що ці зміни торкнуться всіх користувачів.

Якщо .htaccess не працює

Перевірити роботу файлу можна, якщо прописати прості директиви, які за умови правильного синтаксиса і вірних налаштувань httpd.conf повинні спрацювати:

– наприклад, заборонити доступ до сайту ззовні за допомогою директиви:

Order deny,allow
Deny from all

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

Якщо проблема дійсно існує, потрібно в першу чергу шукати її у головному конфігураційному файлі:

– переконатися, що сервер дозволяє використання файлу .htaccess: є запис AllowOverride All (і він не закоментований за допомогою #);

– перевірити, що створено запис VirtualHost для домену. В якості прикладу:

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com
# Інші директиви
</VirtualHost>

– ім’я файлу додаткової конфігурації вказане як вам потрібно. Якщо це .htaccess, то:

AccessFileName .htaccess

– присутній хостнейм сервера (його вказують при створенні URL-перенаправлень) у вигляді IP-адреси сервера або домена:

ServerName www.example.com

Якщо ж причина не в httpd.conf, потрібно перевірити сам .htaccess на наявність синтаксичних помилок. Можна скористатися онлайн-сервісами (наприклад, http://www.htaccesscheck.com/, http://htaccess.madewithlove.be/), або — оригінальним джерелом, де є повний перелік директив разом з синтаксисом.

І ще декілька порад по роботі з .htaccess

Вкрай бажано перед будь-яким редагуванням робити резервну копію файлу, щоб при небажаному результаті можна було «відкотити» зміни назад.

Рекомендуємо вносити зміни покроково з використанням мінімальної кількості директив — і в разі невдачі буде легше зрозуміти, яка саме директива викликала помилку.

Хоча зміни і набувають сили відразу, кеш браузера ніхто не відміняв. Для перевірки роботи сайту після редагування .htaccess регулярно очищуйте його або завантажуйте сторінку в обхід кеша — через комбінацію клавіш Ctrl + F5 (в Safari: Ctrl + R, в Mac OS: Cmd + R).

Найпоширеніша помилка веб-сервера при роботі з .htaccess — 500. Вона вказує на проблему у синтаксисі (помилка в написанні директиви, наприклад), або ж у головному конфігураційному файлі не дозволений такий тип директиви.

Корисні посилання

Краще джерело натхнення для роботи з .htaccess:

http://httpd.apache.org/docs/2.2/howto/htaccess.html

Багато інструкції по роботі з .htacess російською мовою:

http://htaccess.net.ru/

Прості генератори директив для .htaccess:

http://htaccess.ru/generator/

http://www.htaccesseditor.com/en.shtml

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

Читайте також:

Чи допомогла ця стаття вирiшити вашу проблему?