До списку всіх статей

Створення та налаштування файлу .htaccess

Файл .htaccess – це системний файл для налаштування сайту на web сервері Apache. Правила в цьому файлі застосовуються тільки для того каталогу (сайту), де розміщено файл. Це дає змогу налаштувати правила для різних сайтів на одному хостингу. Загальні відомості Веб-сервер Apache забезпечує роботу сайтів і його конфігурація задана в системному файлі apache.conf або httpd.conf (залежить […]

Створення та налаштування файлу .htaccess

Файл .htaccess – це системний файл для налаштування сайту на web сервері Apache. Правила в цьому файлі застосовуються тільки для того каталогу (сайту), де розміщено файл. Це дає змогу налаштувати правила для різних сайтів на одному хостингу.

Загальні відомості

Веб-сервер Apache забезпечує роботу сайтів і його конфігурація задана в системному файлі apache.conf або httpd.conf (залежить від ОС). Оскільки редагування цього файлу пов’язане з ризиками, що вебсервер буде зламаний і перестане працювати, було створено файл .htaccess. Редагування цього файлу пов’язане з меншими ризиками і зачіпає тільки 1 сайт, а не весь сервер одразу ж.

Створення та редагування .htaccess

Щоб створити файл .htaccess, необхідно в кореневому каталозі сайту на вашому сервері створити файл із назвою .htaccess (з крапкою на початку). Це має бути текстовий файл. Детальніші інструкції написані на сайтах хостингів. Приклад такої інструкції.

Приклади налаштувань

Нижче наведено приклади стандартних налаштувань файлу .htaccess. Хороша технічна інструкція з налаштування та синтаксису доступна за посиланням.

Перенаправлення і 301 редирект

  1. Перенаправлення всього сайту на новий домен:
         Redirect 301 / http://www.newdomain.com/
  2. Перенаправлення однієї сторінки на іншу:
         Redirect 301 /page1.html http://mydomain.com/page2.html

Механізм перенаправлення (редиректу) запитів

Для управління тим, як запити обробляються веб-сервером, Apache використовує модуль перенаправлення та перезапису запитів (mod rewrite).

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

Включіть наступну команду у ваш файл .htaccess, щоб дозволити перенаправлення запитів:

     RewriteEngine

Залежно від вашої унікальної ситуації, існує список точних команд для налаштування перенаправлення.

Директиву “RewriteEngine on” у файлі .htaccess достатньо використовувати один раз на весь сайт.

Склеювання різних адрес одного сайту

  1. Перенаправлення сторінки на новий домен:
         RewriteRule ^page1\.html$ http://newdomain.com/ [R=301]
  2. Перенаправления сайта с домена без www на домен с www:
         RewriteEngine On
         RewriteCond %{HTTP_HOST} !^www\..* [NC]
         RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]
  3. І навпаки:
         RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
         RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
  4. Перенаправлення з http на https протокол (попередньо треба поставити SSL сертифікат):
         RewriteEngine On
         RewriteCond %{HTTPS} !on
         RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    Ці рядки треба додавати на самому початку файлу.
  5. Підміна сторінок на сервері
         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 коментарів
Коментарів ще немає...
Будьте першим, хто поділиться своєю думкою!

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Дякуємо!

Ви успішно залишли заявку.
Ми з Вами звʼяжемось найближчим часом.

Ой...

Щось пішло не так. Спробуйте ще раз.
Спробувати ще раз