Налаштування файлу htaccess

1

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

Слід відзначити, що файли .htaccess не працюють в системах на базі Windows, хоча їх можна відредагувати і вивантажити на сумісний веб-сервер, а в системах на базі Linux вони приховано за замовчуванням.

Для локальної роботи з файлами htaccess можна використовувати XAMPP (або MAMP) на Mac – пакет, який встановлює та конфігурує Apache, PHP і MySQL. Для редагування файлів .htaccess на Mac потрібно застосувати текстовий редактор, що дозволяє відкривати приховані файли, такий як TextWrangler.

Файл .htaccess підтримує той же формат, що і основний файл конфігурації Apache: httpd.conf. Багато налаштування, змінювані за допомогою основного файлу конфігурації, крім того, можуть у ньому регулюватися, і навпаки.

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

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

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

Переадресація і перезапис URL

Файли .htaccess широко використовуються для виконання переадресації або перезапису url’ов. Це дуже зручно при оптимізації SEO після зміни доменного імені, або при реорганізації файлової структури, або для скорочення довгого некрасивого ДО а і перетворення його в більш зручний і запам’ятовується.

Переадресація

Переадресація може бути зовсім простий, як тут:

Redirect 301 ^old\.html$ http://localhost/new.html

Тут HTTP код статусу встановлюється на 301 (постійно меняемый) і переадресовує всі запити до old.html прямо на new.html. Для суміщення ДО а з переадресацією ми застосовуємо регулярний вираз, що дає нам відмінний контроль над застосуванням тільки ДО вірного а, але ускладнює конфігурацію і управління нею. Вимагається повний URL переадресовываемого ресурсу.

Перезапис

Перезапис може бути простий, як тут:

RewriteEngine on
RewriteRule ^old\.html$ new.html

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

Для оновлення того, що відображено в адресному рядку браузера відвідувача, можна використовувати мітку R в кінці RewriteRule, наприклад:

RewriteRule ^old\.html$ http://hostname/new.html [r=301]

Мітка r викликає зовнішнє перенаправлення, ось чому тут наведено повний URL (приклад URL тут) нової сторінки. Також при використанні мітки можна визначити код стану. Таким чином оновлюється адресний рядок браузера користувача.

Одним з можливих використань перезапису URL, згаданих мною на початку цього розділу – це зробити некрасиві ДО s (містять інформацію строкового запиту) більш дружніми для відвідувачів і пошукових движків. Давайте розглянемо це в дії:

RewriteRule ^products/([^/]+)/([^/]+)/([^/]+) product.php?cat=$1&brand=$2&prod=$3

Це правило дозволить відвідувачам використовувати такий URL, як products/turntables/technics/sl1210, і перетворити його в product.php?cat=turntables&brand=technics&prod=sl1210. Круглі дужки між косими рисами у вищенаведеному регулярному виразі – це збирають групи – ми можемо використовувати будь-яку з них, як $1, $2 $3 відповідно. Символьний клас [^/]+ в круглих дужках означає збіг будь-якого символу один або більше разів, крім косою риси

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

Створення незвичайних сторінок помилок

Стандартну сторінку помилки 404 демонструвати більше не «круто». На багатьох сайтах користуються можливістю, що надається помилкою file not found, для того, щоб внести в неї деяку частку гумору, хоча мається на увазі, що погано-бідно, але сторінка з помилкою 404 повинна відповідати стилю і теми будь-якої іншої сторінки сайту.

Що дуже близько пов’язана з перезаписом ДО а, з допомогою файлу .htaccess легко обслуговувати власну сторінку помилки 404 замість стандартної:

ErrorDocument 404 «/404.html»

Це – все, що нам потрібно; при виникненні помилки 404 завжди відображається зазначена сторінка. Ще ми можемо налаштувати сторінку для відображення багатьох інших помилок сервера.

Обмеження доступу до певних ресурсів

За допомогою файлів .htaccess можна включити захист будь-якого файлу або каталогу паролем — для всіх користувачів або в залежності від домену або IP адреси. Це, крім усього, і є один з основних методів їх застосування. Щоб запобігти доступ до всього каталогу, просто створюємо файл .htaccess, що містить наступний код:

AuthName «Username and password required»
AuthUserFile /path/to/.htpasswd
Require valid-user
AuthType Basic

Потім цей файл потрібно помістити в каталог, що потребує захисту. Покажчик AuthName визначає повідомлення, яке слід відобразити у діалоговому вікні «ім’я користувача/пароль», AuthUserFile повинен стати шляхом до файлу .htpasswd. Покажчик Require уточнює, що тільки авторизовавшиеся користувачі можуть отримати доступ до захищеного файлу, в той час як AuthType встановлений на Basic.

Щоб захистити якийсь файл, можна обернути вищезгаданий код в вказівник files, визначає захищений файл:

AuthName «Username and password required»
AuthUserFile /path/to/.htpasswd
Require valid-user
AuthType Basic

Нам також потрібен файл .htpasswd для тих типів аутентифікації, де міститься список розділених двокрапкою імен користувачів і зашифрованих паролів, необхідних для отримання доступу до захищеного ресурсу(ам). Цей файл треба зберегти в каталог, доступний з мережі. Існує ряд сервісів, які можна використовувати для автоматичного генерування цих файлів, так як паролі мають зберігатися в зашифрованому вигляді.

Блокування доступу до певних об’єктів

Файл .htaccess, крім того, застосовується для швидкої і легкої блокування всіх запитів з IP-адреси або агента користувача. Щоб блокувати якийсь IP-адресу, просто додайте в свій файл .htaccess наступний код:

order allow,deny
deny from 192.168.0.1
allow from all

Покажчик order говорить Apache, в якому порядку оцінювати директиви allow/deny. В даному випадку першим оцінюється allow, а за ним deny. Покажчик allow from all оцінюється самим першим (навіть якщо з’являється після deny) та вирішуються всі IP, далі, якщо IP клієнта відповідає зазначеному в пункті deny, доступ забороняється. Таким чином, доступ дозволяється всім IP, крім вказаного. Слід зазначити, що, крім того, можна позбавити доступу цілі блоки IP, надавши більш короткий IP, наприклад, 192.168.

Для заборони запитів з агента користувача можна зробити наступне:

RewriteCond %{HTTP_USER_AGENT} ^OrangeSpider
RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$ [r=301,l]

У цьому прикладі будь-клієнт з рядком HTTP_USER_AGENT, що починається з OrangeSpider (шкідливий бот), спрямовується назад до адреси, з якого був ініційований. Регулярний вираз зіставляє будь-який одиночний символ (.) нуль або більше разів (*) і переадресовує до змінної середовища %{REMOTE_ADDR}. Мітка l, яку ми тут застосували, віддає Apache вказівку розглядати це як відповідність останнім правило, і, таким чином, до перезапису інші правила виконуватися не будуть.

Втручаємося в режим візуалізації IE

Поряд із контролем над тим, як сервер відповідає на певні запити, можна зробити дещо з браузером користувача, наприклад, змусити IE відображати сторінки, використовуючи певний рушій візуалізації. Так, можна застосувати модуль mod_headers, якщо той присутня, для установки заголовка X-UA-Compatible:

Header set X-UA-Compatible «IE=Edge»

Шляхом додавання рядка у файл .htaccess IE віддається вказівку застосувати найвищий доступний режим відображення. Як показує HTML5 Boilerplate, ще можна уникнути інсталяції цього заголовка не вимагають файли, використавши параметр FilesMatch наступним чином:

Header unset X-UA-Compatible

Здійснення кешування

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

Якщо ви перевіряєте свій сайт на Google PageSpeed або Yahoo’s YSlow і отримали повідомлення про встановлення довгострокових заголовків, то ось як це можна виправити:

ExpiresActive on
ExpiresActive on
ExpiresByType image/gif «access plus 1 month»
ExpiresByType image/png «access plus 1 month»
ExpiresByType image/jpg «access plus 1 month»
ExpiresByType image/jpeg «access plus 1 month»
ExpiresByType video/ogg «access plus 1 month»
ExpiresByType audio/ogg «access plus 1 month»
ExpiresByType video/mp4 access plus 1 month»
ExpiresByType video/webm «access plus 1 month»

Різні параметри ExpiresByType можна встановити для будь-якого контенту, перерахованого в застосовуваному вами інструменті виконання, або чого завгодно, де потрібно управляти кешуванням. Перший покажчик, ExpiresActive on, просто гарантує, що генерація Expires headers включена. Ці покажчики залежать від Apache, завантажує модуль mod_expires.

Включаємо стиснення

Інше попередження, яке можна отримати в процесі перевірки продуктивності, відноситься до включення стиснення, і це теж можна виправити, просто відновивши файл .htaccess:

FilterDeclare COMPRESS
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css
FilterProvider COMPRESS DEFLATE resp=Content-Type $text/javascript
FilterChain COMPRESS
FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

Ця схема стиснення працює на нових версіях Apache (2.1+), застосовують модуль mod_filter. Він використовує алгоритм DEFLATE для стиснення вмісту в залежності від його типу, і в цьому випадку ми визначаємо text/html, text/css text/javascript (які, швидше за все, виявляться видами файлів, помічених у PageSpeed/Yslow).

застосувати, використовуючи параметр FilterDeclare – в даному випадку COMPRESS. Потім перераховуємо види контенту, для якого нам потрібно використовувати цей фільтр. Покажчик FilterChain віддає команду серверу вибудувати ланцюг фільтрів на основі перерахованих нами параметрів FilterProvider. Параметр FilterProtocol дає можливість визначати параметри, застосовані до послідовності фільтрів, всякий раз, коли вона запускається; опції, які нам слід використовувати – це change=yes (контент може бути змінений фільтром (в даному випадку – стиснутий) і byteranges=no (фільтр повинен застосовуватися тільки до певних файлів).

У більш старих версіях Apache модуль mod_deflate використовується для конфігурування стиснення DEFLATE. В цьому випадку у нас менше контролю над тим, як фільтрується контент, а покажчики простіше:

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css-text/javascript

Тут ми лише встановлюємо алгоритм стиснення з допомогою покажчика SetOutputFilter, а потім визначаємо види контенту, який потрібно стиснути, використовуючи параметр AddOutputFilterByType.

Зазвичай веб-сервер застосовує один з цих модулів в залежності від того, яка версія Apache використовується. Зазвичай ви знаєте це заздалегідь, але якщо створюється універсальний файл .htaccess, який можна використовувати на багатьох сайтах, або яким можна поділитися з іншими людьми, і тому невідомо, які модулі застосувати, то ви можете використовувати обидва вищенаведених програмних блоку, обгорнутих в покажчики IfModule module_name для того, щоб використовувався відповідний модуль і сервер не видавав по 500 помилок, якщо ми станемо раптом конфігурувати модуль, невнесення в список. Вам потрібно знати, що для хостів, що працюють з великою кількістю сайтів з єдиного блоку, стиснення відключають, оскільки при стисненні на сервері відбувається невелика втрата продуктивності CPU.

Висновок уроку по налаштуванню файл htaccess

Ми розглянули кілька прикладів основновных налаштувань файлу htaccess і то як вирішувати певні завдання, які нас цікавлять, створюють і підтримують сайти. Як зазвичай трапляється з подібним вступним уроком, порушена тема представляється як введення в окремий предмет. Існує безліч додаткових опцій і конфігурацій, які слід дослідити, так що я настійно рекомендував би вам продовжити читання на особливо цікаві вам теми.

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