Оптимальна настройка файлу htaccess

Всі, хто одного разу переходить з безкоштовних хостингів на платні, стикаються з необхідністю налаштування цього самого хостингу. Як відомо, саме від правильного налаштування сервера, на якому знаходиться ваш сайт, залежить успішність вашого інтернет-проекту. Так як багато хто не можу безпосередньо управляти настройками сервера, а також налаштуваннями PHP через php.ini, є можливість налаштувати сервер через файл htaccess. Сьогодні відповімо на питання: Як налаштувати htaccess?
Перед тим, як правильно налаштувати htaccess, давайте визначимося, що це таке:

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

Визначення основних опцій сервера

- ExecCGI - вона відповідає за запуск CGI-скриптів. Заборона на запуск скриптів підвищує захищеність вашого сайту.

-Includes - заборона на SSI (Server Side Include). Замість цього можна дозволити SSI без запуску скриптів опцією IncledesNOEXEC.

+FollowSymLinks - дозволяє використовувати посилання на файли за межами каталогу.

ієрархія опцій

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

Як зробити редирект в htaccess

Нижче наведено таблицю кодів відповідей сервера 3хх Redirect:

Нижче представлений синтаксис директиви Redirect:

Оптимальна настройка файлу htaccess

Директива mod_rewrite - це потужний інструмент перетворення URL. Для нього можливо будь-яке перетворення URL, в залежності від умов.

Розглянемо 301 редирект між доменами з WWW і без нього:

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

- ця перевірка не є обов'язковою, але на деяких Apache модуль mod_rewrite може бути відключений і якщо не буде цієї перевірки, то сервер видасть помилку 500, і сайт не буде завантажуватися.

RewriteCond - це умова для початку перетворення, тобто, визначаються необхідні умови для виконання RewriteRule

L - зупинить використання правила

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

Директива DirectoryIndex

При завантаженні сайту, за замовчуванням першим завантажується файл Index.php або Index.html. в разі його відсутності і активації опції + Indexes в htaccess, ви побачите каталог сайту. Директивою DirectoryIndex можна призначити індексний файл, той файл, який буде завантажуватися за замовчуванням.

У DirectoryIndex можна вказати кілька файлів:

В цьому випадку завантаження буде починатися з файлу index.html. якщо його немає на сервері, то завантаження почнеться з index.htm. якщо і його немає, то з файлу index.php. Можна вказати будь-яку кількість файлів завантаження, обмежень за цим параметром немає.

Налаштування часового поясу, кодування в htaccess

У деяких випадках є необхідність в явній вказівці часового поясу і кодування сайту. У деяких версіях Апачі були проблеми з часовим поясом, через це не працювали функції часу в PHP. Для підстраховки рекомендується встановлювати ці параметри в htaccess.

Оптимальна настройка файлу htaccess

ServerSignature Off - відключає підпис сервера у відповідях на коди помилок.

Налаштування властивостей PHP

У більшості випадків хостер закриває доступ до файлу php.ini, але у користувача виникає гостра необхідність змінити деякі властивості PHP, наприклад ліміт на обсяг завантаження файлу.

Оптимальна настройка файлу htaccess

upload_max_filesize - дає дозвіл на завантаження файлів до 32 Мб. У стандартних налаштуваннях php.ini дозволяється завантаження файлів розміром від 8 до 16 Мб

post_max_size - встановлює розмір постинга 10 Мб. За замовчуванням - 2 Мб

max_execution_time - встановлює час на виконання скриптів в PHP. У стандартному PHP.ini значення це дорівнює 30 секундам. Це потрібно, якщо в роботі використовуються складні скрипти, на виконання яких потрібно часу більше, ніж 30 секунд.

Перевизначення типів файлів

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

Оптимальна настройка файлу htaccess

У першому рядку прикладу відбувається підміна php-файлів на html-файли. Тобто, файл з розширенням php може мати розширення html, але працювати як php.

У третій і наступних рядках відбувається призначення типів файлів, до яких типів належать з файли з певним розширенням. Для Java - з розширенням .js і так далі.

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

архівація даних

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

На серверах хостингів можуть бути два модуля стиснення даних:

  1. Модуль стиснення mod_deflate
  2. Модуль стиснення mod_gzip

Модуль стиснення mod_deflate

Як видно з прикладу в директиві AddOutputFilterByType DEFLATE потрібно вказувати типи файлів, які повинні бути заархівовані для передачі клієнту. Варто відразу зауважити, що в цей список не потрібно додавати файли jpeg, gif, avi, flv, так як ці формати вже і є свого роду архіви. Прискорення при стиснення подібних типів файлів не буде.

Модуль стиснення mod_gzip

Оптимальна настройка файлу htaccess

Даний модуль більш гнучкий для настройки, так як можна вказувати окремо маски файлів для стиснення.

Ступінь стиснення в обох модулів однакова, різниці в швидкості завантаження фалів не значний. Можна використовувати той чи інший модуль, в залежності який встановлений на сервері.

кешування даних

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

Для цих цілей застосовується два модуля:

модуль mod_headers

Цей модуль дозволяє встановити в заголовку відповіді сервера правила кешування для різних типів файлів.

Оптимальна настройка файлу htaccess

Як видно з прикладу для файлів з розширенням html, htm встановлений термін зберігання в кеші браузера один день (час вказується в секундах). Термін зберігання в кеші можна вказати для всіх типів файлів.
Для php-файлів кешування було відключено взагалі.

модуль mod_expires

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

Оптимальна настройка файлу htaccess

Можна використовувати будь-який з цих модулів, все залежить від того, який з них встановлено на сервері.

В якості особистого прикладу хочу зауважити, що деякі хостинги працюють з двома серверними мовами Apache і nginx. У моєму випадку за кешування статичних даних відповідає Apache. а за кешування динамічних - nginx. Тому настройка кешування в htaccess для динамічних сторінок під Apache не дає ніякого результату. Після перевірки налаштувань кешування динамічних даних у хостера, було виявлено, що за замовчуванням сервер налаштований оптимально, для подібних сторінок, і в додаткових настройках не було потреби. Прикладом є хостинг сайтів Beget.ru

Призначення сторінок помилок

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

  1. Надати незвичайний вид стандартним сторінкам помилок
  2. Чи не дозволити відвідувачам сайту при виникненні таких помилок покинути ваш сайт. На таких сторінках можна розмістити необхідні посилання, наприклад на головну сторінку, і так далі, все вже буде залежати від вашої фантазії.

Оптимальна настройка файлу htaccess

Варто зауважити, що для помилок з кодом 4xx можна зробити динамічні сторінки на PHP, а для помилок 5хх краще зробити статичні сторінки на html, так як подібні помилки є помилками сервера, і при таких помилках php НЕ буде завантажуватися в браузер.

висновок

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