Файл .htaccess – це системний файл для налаштування сайту на web сервері Apache. Правила в цьому файлі застосовуються тільки для того каталогу (сайту), де розміщено файл. Це дає змогу налаштувати правила для різних сайтів на одному хостингу.
Загальні відомості
Веб-сервер Apache забезпечує роботу сайтів і його конфігурація задана в системному файлі apache.conf або httpd.conf (залежить від ОС). Оскільки редагування цього файлу пов’язане з ризиками, що вебсервер буде зламаний і перестане працювати, було створено файл .htaccess. Редагування цього файлу пов’язане з меншими ризиками і зачіпає тільки 1 сайт, а не весь сервер одразу ж.
Створення та редагування .htaccess
Щоб створити файл .htaccess, необхідно в кореневому каталозі сайту на вашому сервері створити файл із назвою .htaccess (з крапкою на початку). Це має бути текстовий файл. Детальніші інструкції написані на сайтах хостингів. Приклад такої інструкції.
Приклади налаштувань
Нижче наведено приклади стандартних налаштувань файлу .htaccess. Хороша технічна інструкція з налаштування та синтаксису доступна за посиланням.
Перенаправлення і 301 редирект
- Перенаправлення всього сайту на новий домен:
Redirect 301 / http://www.newdomain.com/ - Перенаправлення однієї сторінки на іншу:
Redirect 301 /page1.html http://mydomain.com/page2.html
Механізм перенаправлення (редиректу) запитів
Для управління тим, як запити обробляються веб-сервером, Apache використовує модуль перенаправлення та перезапису запитів (mod rewrite).
Використання .htaccess є найкращим варіантом для їх налаштування, оскільки правила обробки запитів зазвичай завжди змінюються залежно від певних сайтів і папок.
Включіть наступну команду у ваш файл .htaccess, щоб дозволити перенаправлення запитів:
RewriteEngine
Залежно від вашої унікальної ситуації, існує список точних команд для налаштування перенаправлення.
Директиву “RewriteEngine on” у файлі .htaccess достатньо використовувати один раз на весь сайт.
Склеювання різних адрес одного сайту
- Перенаправлення сторінки на новий домен:
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] - Перенаправлення з http на https протокол (попередньо треба поставити SSL сертифікат):
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Ці рядки треба додавати на самому початку файлу. - Підміна сторінок на сервері
RewriteRule ^page1\.html$ /page2.html [L]
Модифікація URL в htaccess
.htaccess найчастіше використовується для створення перенаправлень або модифікації URL під час виконання.
За цю функцію відповідає модуль mod rewrite, який часто вмикається в налаштуваннях Apache.
RewriteBase вказує префікс адреси, RewriteCond перевіряє відповідність, а RewriteRule оновлює URL відповідно до регулярного виразу, якщо всі правила відповідності задоволені. Ці три директиви використовуються для зміни URL у файлах htaccess.
У разі, якщо модуль наразі не активний, необхідно спочатку увімкнути Mod Rewrite:
RewriteEngine on
Зазначимо, що як префікс для URL потрібно використовувати корінь:
RewriteBase /
Оригінальний URL, який є шляхом до запитуваного файлу щодо місця розташування файлу htaccess, буде автоматично змінено з index.html на index.php. Зверніть увагу, що вихідний URL має такий вигляд:
RewriteRule index.html /index.php
Для ефективнішої заміни можна використовувати регулярні вирази, які складаються зі звичайних символів, чисел, спеціальних символів і змінних.
Основними спеціальними символами є такі:
- ^ – початок рядка;
- $ – кінець рядка;
- . – будь-який символ;
- – будь-яка кількість будь-яких символів;
- ? – один певний символ;
- [0-9] – послідовність символів, наприклад, від 0 до 9;
- | – символ або, вибирається або одна група, або інша;
- () – використовується для вибору груп символів.
У регулярних виразах файлу .htaccess можна використовувати змінні із заголовків запиту:
- %{HTTP_USER_AGENT} – поле User-Agent, яке передає браузер користувача;
- %{REMOTE_ADDR} – IP адреса користувача;
- %{REQUEST_URI} – запитуваний URI;
- %{QUERY_STRING} – параметри запиту після знака ?.
Хоча їх набагато більше, це ті, що використовуються найчастіше. З рештою ви можете ознайомитися в офіційній літературі. Регулярні вирази надають більше можливостей, наприклад, можна замінити такі слова у всіх html-сторінках на php:\
RewriteEngine On;
RewriteBase /;
RewriteRule ^(.*)\.html$ $1.php
Директива RewriteCond дає ще більше гнучкості. Вона дає змогу додавати налаштування для конкретного варіанти URL.
RewriteBase /;
RewriteCond % {HTTP_HOST} ^www.site.ua$
RewriteRule ^(.*)\.html$ $1.php
Керування доступом до сайту
Дозволити доступ конкретним IP (для інших доступ заборонений):
Require ip 1.1.1.1
Require ip 2.2.2.2
Кілька IP-адрес можуть вказуватися через пробіл або окремими директивами, кожна в новому рядку.
Заборонити доступ конкретним IP (для інших доступ дозволено). Для роботи забороняють директиви, їх необхідно укладати в блоки <RequireAll>:
<RequireAll>
Require all granted
Require not ip 1.1.1.1
</RequireAll>
У разі використання Allow,Deny:
Дозволити доступ усім, крім конкретного IP:
Order Allow,Deny
Allow from all
Deny from 1.1.1.1
Заборонити доступ усім, крім конкретного IP:
Order Deny,Allow
Deny from all
Allow from 1.1.1.1
Заборонити доступ для всіх:
Deny from all
Аналогічним чином можна налаштувати доступ до конкретних файлів, включивши ці директиви в блоки , наприклад:
<Files myfile.html>
Require all denied
Require ip 1.1.1.1
</Files>
<Files myfile.html>
Order Deny,Allow
Deny from all
Allow from 1.1.1.1
</Files>
Захист сайту або директорії паролем. Базова аутентифікація
Базова автентифікація, яка діє на рівні веб-сервера Apache і також налаштовується за допомогою файлу .htaccess, може використовуватися для захисту веб-сайту або певного підкаталогу веб-сайту за допомогою пароля.
Спочатку створіть логін і пароль, які будуть використовуватися для доступу до облікового запису.
Для цього відкрийте SSH-з’єднання з обліковим записом і виконайте таку команду з потрібними значеннями:
пароль для логіна htpasswd:
htpasswd -bc
Після виконання цієї команди файл .htaccess буде створено в кореневому каталозі вашого облікового запису.
Використовуйте наведену вище команду ще раз, якщо в майбутньому вам знадобиться змінити заданий пароль.
Створіть файл з ім’ям . htaccess у директорії, яку ви хочете захистити паролем, наприклад wp-admin, і заповніть його такою інформацією, замінивши і user на першу літеру вашого логіна і сам логін:
AuthType Basic
AuthName “Authentication Required”
AuthUserFile /home/u/user/.htpasswd
require valid-user
Цю вставку має бути зроблено в загальний файл .htaccess, що міститься в публічній html-директорії вашого сайту, якщо ми говоримо про захист усього сайту.
Зазначення нестандартного індексного файлу
Коли ви заходите на будь-який сайт, сервер шукає в кореневій папці індексний файл, який часто надається як index.php або index.html. Ми можемо вказати це в директиві.htaccess, якщо наш індексний файл відрізняється від стандартного і називається, наприклад, main.php:
DirectoryIndex main.php
Налаштування сторінок помилок у htaccess
Веб-сервер надасть стисле повідомлення і код помилки в разі виникнення будь-яких помилок під час створення сторінки. Але якщо ви створите окрему сторінку для кожної проблеми, доповнену зображеннями і докладним поясненням, користувачі зрозуміють її набагато краще.
Тут дуже допоможе налаштування htaccess. Можна скористатися директивою ErrorDocument. Для помилок 4xx і 5xx з її допомогою можна вказати html-сторінки.
Наприклад, для 404
ErrorDocument 404 http://site.ua/error/404.shtml
ErrorDocument 403 http://site.ua/error/403.shtml
ErrorDocument 401 http://site.ua/error/401.shtml
ErrorDocument 500 http://site.ua/error/500.shtml
Блокування запитів за User-Agent
Можна обмежити доступ до сайту для певних User-Agent:
RewriteCond %{HTTP_USER_AGENT} (SolomonoBot|MJ12Bot)
RewriteRule ^.*$ – [R=404,L]
Кодування
У .htaccess також можна примусово встановити кодування для сайту, використовуючи директиву AddDefaultCharset і передаючи їй один параметр – бажане кодування, наприклад:
AddDefaultCharset UTF-8
чи
AddDefaultCharset WINDOWS-1251
Або можна відключити встановлення кодування web-сервером, використовуючи директиву:
CharsetDisable on
Обмеження за видами запитів
Для застосування обмежень для певних методів запитів можна використовувати блоки :
SetEnvIfNoCase User-Agent SolomonoBot bad_bot
SetEnvIfNoCase User-Agent MJ12Bot bad_bot
<Limit GET POST HEAD>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>
Для нових версій Apache, починаючи з 2.4, оптимально використовувати директиви Require і укладати їх у блоки :
SetEnvIfNoCase User-Agent SolomonoBot bad_bot
SetEnvIfNoCase User-Agent MJ12Bot bad_bot
<Limit GET POST HEAD>
<RequireAll>
Require all granted
Require not env bad_bot
</RequireAll>
</Limit>
Керування кешуванням даних
Файл .htaccess можна використовувати для завдання різних термінів кешування контенту вашого сайту. Доцільно збільшити термін кешування для даних, що рідко змінюються, щоб прискорити завантаження сайту. Наприклад, такий код
ExpiresActive on
ExpiresByType image/jpeg “access plus 1 day”
ExpiresByType image/gif “modification plus 3 months”
ExpiresByType text/html “now”
відключає кешування для HTML, для зображень JPEG встановлює термін в 1 день з моменту звернення, а для GIF – 3 місяці з моменту модифікації файлу.
Обговорення
0 коментарівБудьте першим, хто поділиться своєю думкою!