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

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

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

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

Зміст

  1. Що таке .htaccess і для чого він потрібен
  2. Як створити файл .htaccess
  3. Синтаксис .htaccess
  4. Можливості .htaccess
  5. Якщо .htaccess не працює
  6. І ще кілька порад по роботі з .htaccess
  7. Корисні посилання

Що таке .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.

Блокування ботів

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

SetEnvIfNoCase User-agent (Abonti|AhrefsBot|Aport|AspiegelBot|asterias|Baiduspider|BDCbot|Birubot|BLEXBot|BUbiNG|BuiltBotTough|Bullseye|BunnySlippers|Butterfly|CamontSpider|CCBot|Cegbfeieh|CheeseBot|CherryPicker|coccoc|CopyRightCheck|cosmos|crawler|Crescent|DeuSu|discobot|DittoSpyder|DnyzBot|DomainCrawler|DotBot|EasouSpider|EmailCollector|EmailSiphon|EmailWolf|EroCrawler|Exabot|ExtractorPro|Ezooms|FairShare|Fasterfox|FeedBooster|Foobot|Genieo|Gigabot|GrapeshotCrawler|Harvest|hloader|HTTrack|humanlinks|HybridBot|Incutio|InfoNaviRobot|InternetSeer|IstellaBot|JamesBOT|JennyBot|k2spider|kmSearchBot|larbin|LexiBot|libWeb|libwww|Linguee|LinkExchanger|LinkextractorPro|linko|LinkWalker|lmspider|LNSpiderguy|magpie|MaxPointCrawler|MegaIndex|memoryBot|MIIxpc|Mippin|MJ12bot|MLBot|moget|MSIECrawler|NetAnts|NetpeakCheckerBot|NICErsPRO|NjuiceBot|NPBot|Nutch|OLEcrawler|Openfind|PostRank|ProWebWalker|Purebot|PycURL|RepoMonkey|Riddler|RMA|Scrapy|SemrushBot|serf|SeznamBot|SISTRIX|SiteBot|SiteSnagger|Serpstat|Slurp|SnapPreviewBot|Sogou|Soup|SpankBot|spanner|spbot|Spinn3r|SpyFu|suggybot|SurveyBot|suzuran|SWeb|Teleport|Telesoft|TheNomad|TightTwatBot|Titan|True_Robot|ttCrawler|turingos|TurnitinBot|UbiCrawler|UnisterBot|Unknown|VCI|Vedma|Voyager|WBSearchBot|WebAuto|WebBandit|WebCopier|WebEnhancer|WebmasterWorldForumBot|WebReaper|WebSauger|WebStripper|Wotbox|Yeti|YottosBot|Zao|Zeus|ZyBORG) not-allowed=1
Order Allow,Deny
Allow from ALL
Deny from env=not-allowed

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

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

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

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. Наші пропозиції на виділені сервери підійдуть для будь-якого користувача. Якщо вас також цікавить покупка доменних імен, то при замовленні хостингу ви зможете відразу дізнатися, скільки коштує домен і хостинг.

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