Открыть сервисСервис

Файл .htaccess: настройка веб-сервера Apache

.htaccess (от англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также ряда совместимых с ним серверов (LiteSpeed, OpenLiteSpeed, Cherokee), который позволяет задавать директивы настройки для конкретного каталога и его подкаталогов без изменения основного конфигурационного файла httpd.conf. Название файла начинается с точки, что делает его скрытым в Unix-подобных операционных системах. Файл представляет собой обычный текстовый документ, содержащий директивы Apache в том же синтаксисе, что и глобальная конфигурация.

Назначение и принцип работы

Основная функция .htaccessобеспечение децентрализованного управления конфигурацией веб-сервера. Это особенно актуально на виртуальном хостинге, где у пользователя нет доступа к основному конфигурационному файлу сервера, но есть необходимость менять параметры работы своего сайта.

Принцип работы основан на иерархической структуре Apache. Когда сервер обрабатывает запрос к файлу в определённом каталоге, он проверяет наличие файла .htaccess в этом каталоге и во всех родительских каталогах вплоть до корневого. Директивы, найденные в этих файлах, применяются к запрашиваемому ресурсу, при этом правила из вложенных каталогов имеют приоритет над правилами из родительских. Данный механизм активируется директивой AllowOverride, которая указывается в глобальной конфигурации сервера и определяет, какие группы директив могут быть переопределены в файлах .htaccess.

Основные возможности

Модуль mod_rewrite

Наиболее часто .htaccess используется для управления модулем перенаправлений mod_rewrite. С его помощью реализуются ЧПУ (человекопонятные URL), редиректы со старых адресов на новые, перенаправление с www на адрес без префикса или наоборот, а также блокировка доступа к определённым файлам и директориям. Классический пример — перенаправление всех запросов на единую точку входа фронт-контроллера в популярных CMS (WordPress, Joomla, Laravel):

`` RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L] ``

Управление доступом

Файл позволяет ограничивать доступ к каталогам по IP-адресу, имени пользователя или referrer. Для авторизации используется связка с файлом .htpasswd, где хранятся хэши паролей. Директивы Require, Deny, Allow (в зависимости от версии Apache) позволяют гибко настраивать политику безопасности.

Настройка MIME-типов и обработчиков

Через .htaccess можно добавлять собственные MIME-типы с помощью директивы AddType, что необходимо для корректной отдачи редких форматов файлов. Директива AddHandler связывает расширения файлов с определёнными обработчиками, например, для запуска CGI-скриптов.

Управление кэшированием и сжатием

Директивы ExpiresActive, ExpiresByType, Header set Cache-Control управляют заголовками кэширования браузера. Модуль mod_deflate позволяет включить сжатие передаваемых данных (gzip, deflate), что значительно уменьшает объём трафика.

Директивы ошибок

Директива ErrorDocument позволяет задать собственные страницы для кодов ответа HTTP (403, 404, 500 и другие). Это улучшает юзабилити сайта и позволяет сохранить единый дизайн в случае ошибок.

Защита от нежелательных запросов

С помощью правил mod_rewrite и директивы Deny реализуется блокировка подозрительных User-Agent, защита от горячих ссылок (hotlink protection), когда сторонние сайты используют изображения с сервера, а также ограничение доступа к служебным файлам (например, .env, wp-config.php).

Ограничения и недостатки

Использование .htaccess связано с рядом ограничений. Главным из них является снижение производительности: при каждом запросе Apache сканирует все каталоги пути на наличие файлов .htaccess, что увеличивает время обработки. На высоконагруженных проектах рекомендуется переносить директивы в основной конфигурационный файл виртуального хоста (<VirtualHost>).

Не все директивы допустимы в .htaccess. Например, изменение порта сервера, настройка виртуальных хостов или включение модулей возможно только на глобальном уровне. Кроме того, неправильно составленный файл может привести к ошибке 500 Internal Server Error, что потребует проверки журналов ошибок сервера.

Примеры практического использования

Перенаправление с HTTP на HTTPS

`` RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] ``

Установка временной страницы обслуживания

`` RewriteEngine On RewriteCond %{REQUEST_URI} !^/maintenance\.html$ RewriteRule ^(.*)$ /maintenance.html [R=302,L] ``

Запрет листинга каталога

`` Options -Indexes ``

Изменение индексного файла

`` DirectoryIndex index.php index.html ``

Совместимость и аналоги

Файл .htaccess работает на серверах Apache и совместимых с ним. Веб-сервер Nginx, который также широко распространён, не поддерживает .htaccess. Для Nginx используется файл конфигурации nginx.conf и директивы в блоках server и location. Существуют инструменты для автоматической конвертации правил .htaccess (в первую очередь mod_rewrite) в синтаксис Nginx, однако полная совместимость достигается не всегда. В связке Nginx + Apache (где Nginx выступает в роли обратного прокси) файл .htaccess продолжает работать на внутреннем сервере Apache.

В операционной системе Windows файл может называться .htaccess без точки в начале имени, однако при загрузке на Unix-хостинг имя должно быть изменено на стандартное.

Безопасность

Файл .htaccess сам по себе является конфиденциальным, так как может содержать сведения о структуре каталогов и правилах безопасности. По умолчанию Apache запрещает доступ к файлам, начинающимся с точки, но для дополнительной защиты часто добавляют правило:

`` <FilesMatch "^\.ht"> Require all denied </FilesMatch> ``

Резервные копии файла, создаваемые текстовыми редакторами (например, .htaccess.bak, .htaccess~), также могут стать вектором атаки, поэтому их не рекомендуется хранить на сервере.

Источники

  • Документация Apache Software Foundation (модуль mod_rewrite, директива AllowOverride)
  • Книга «Apache: The Definitive Guide» (O'Reilly Media)
  • Материалы официальной документации веб-сервера Nginx
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru