Оптимальна настройка файлу 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:

Директива mod_rewrite - це потужний інструмент перетворення URL. Для нього можливо будь-яке перетворення URL, в залежності від умов.
Розглянемо 301 редирект між доменами з WWW і без нього:
В даному прикладі відбувається 301 редирект з сайту без www на сайт c www, що буде корисно для склеювання сайтів при обході пошукового робота.
RewriteCond - це умова для початку перетворення, тобто, визначаються необхідні умови для виконання RewriteRule
L - зупинить використання правила
Тепер для пошукових роботів стало ясно, який з варіантів сайту (з WWW і без нього) є основним дзеркалом, не відбуватиметься дублювання головної станиці при індексуванні. Таким чином, відбулася склейка сайту.
Директива DirectoryIndex
При завантаженні сайту, за замовчуванням першим завантажується файл Index.php або Index.html. в разі його відсутності і активації опції + Indexes в htaccess, ви побачите каталог сайту. Директивою DirectoryIndex можна призначити індексний файл, той файл, який буде завантажуватися за замовчуванням.
У DirectoryIndex можна вказати кілька файлів:
В цьому випадку завантаження буде починатися з файлу index.html. якщо його немає на сервері, то завантаження почнеться з index.htm. якщо і його немає, то з файлу index.php. Можна вказати будь-яку кількість файлів завантаження, обмежень за цим параметром немає.
Налаштування часового поясу, кодування в htaccess
У деяких випадках є необхідність в явній вказівці часового поясу і кодування сайту. У деяких версіях Апачі були проблеми з часовим поясом, через це не працювали функції часу в PHP. Для підстраховки рекомендується встановлювати ці параметри в htaccess.

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

upload_max_filesize - дає дозвіл на завантаження файлів до 32 Мб. У стандартних налаштуваннях php.ini дозволяється завантаження файлів розміром від 8 до 16 Мб
post_max_size - встановлює розмір постинга 10 Мб. За замовчуванням - 2 Мб
max_execution_time - встановлює час на виконання скриптів в PHP. У стандартному PHP.ini значення це дорівнює 30 секундам. Це потрібно, якщо в роботі використовуються складні скрипти, на виконання яких потрібно часу більше, ніж 30 секунд.
Перевизначення типів файлів
Це потрібно, якщо на сервері стався збій і потрібно навчити Apache розрізняти типи файлів. Також стане в нагоді, коли потрібно підмінити одні типи файлів на інші. Мається на увазі, що файли з одним розширенням можуть працювати, як файли з іншим розширенням.

У першому рядку прикладу відбувається підміна php-файлів на html-файли. Тобто, файл з розширенням php може мати розширення html, але працювати як php.
У третій і наступних рядках відбувається призначення типів файлів, до яких типів належать з файли з певним розширенням. Для Java - з розширенням .js і так далі.
Останній рядок примусово завантажує контент з вашого сайту на комп'ютер. Це потрібно якщо є контент для скачування і при спробі його скачати буде запропоновано його завантажити саме на комп'ютер, а не відкривати його в браузері.
архівація даних
У файлі htaccess можна примусово змусити передавати файли клієнтові в архивированном вигляді, що збільшує швидкість завантаження сторінки і зменшує навантаження на сервер.
На серверах хостингів можуть бути два модуля стиснення даних:
- Модуль стиснення mod_deflate
- Модуль стиснення mod_gzip
Модуль стиснення mod_deflate
Як видно з прикладу в директиві AddOutputFilterByType DEFLATE потрібно вказувати типи файлів, які повинні бути заархівовані для передачі клієнту. Варто відразу зауважити, що в цей список не потрібно додавати файли jpeg, gif, avi, flv, так як ці формати вже і є свого роду архіви. Прискорення при стиснення подібних типів файлів не буде.
Модуль стиснення mod_gzip

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

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

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

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