Общие сведения
.htaccess - это конфигурационный файл веб-сервера Apache, который позволяет задавать различные настройки для работы веб-сервера, применяемые для конкретных каталогов пользователя.
Параметры, указанные в .htaccess, не затрагивают настройки главного конфигурационного файла Apache и имеют силу только для каталога, в котором этот файл размещен, и его подкаталогов. Для подкаталогов также можно создавать дополнительные .htaccess-файлы; при этом необходимо учитывать, что настройки .htaccess, заданные в подкаталоге, переопределят настройки, назначенные для него в файле .htaccess, размещенном на уровне выше.
Настройки в .htaccess задаются различными директивами, которые далее обрабатываются и выполняются веб-сервером. С помощью .htaccess можно настраивать перенаправления, управлять опциями PHP, устанавливать разрешения и права доступа к файлам, задавать собственные страницы ошибок и выполнять множество других действий.
Создание и редактирование .htaccess
Создать файл настроек .htaccess вы можете при помощи файлового менеджера панели управления аккаунтом.
1. Перейдите в раздел "Файловый менеджер" панели управления.
2. Выберите пункт меню "Файл" - "Новый файл".
3. Выберите из списка расширений .htaccess.
4. Нажмите кнопку "Создать файл".
Возникновение ошибки "Имя уже используется" означает, что данный файл уже создан в текущей директории.
Для редактирования файла в файловом менеджере перейдите в директорию с данным файлом, выделите его кликом левой кнопки мыши и выберите пункт меню "Файл" - "Редактировать".
В открывшейся форме редактирования можно внести необходимые изменения в файл конфигурации: добавить или удалить директивы. Также можно закомментировать неиспользуемые настройки, для этого необходимо добавить в начале строки символ #. Настройки, указанные в таких строках, учитываться не будут.
Вы также можете редактировать .htaccess во внешних редакторах, но обратите внимание, что текстовые редакторы Windows (например, "Блокнот") при сохранении любых документов с кодировкой UTF-8 добавляют в них метки порядков байтов юникода - BOM-сигнатуры. Файлы с такой сигнатурой некорректно обрабатываются веб-сервером, поэтому мы рекомендуем редактировать .htaccess напрямую в "Файловом менеджере" или через специальный редактор "Notepad++".
Примеры настроек
Перенаправления
Настройка редиректов описана в отдельной статье: Типовые перенаправления.
Параметры PHP
Настройка опций PHP через .htaccess описана в отдельной статье: Настройка параметров PHP.
Управление доступом к сайту
Разрешить или ограничить доступ к сайту для определенных IPv4-адресов можно с помощью директив Order Allow,Deny
или Require
. В новых версиях Apache, начиная с 2.4, которая используется на наших хостинговых серверах, рекомендуется использовать именно Require.
Обратите внимание, что в рамках нашей архитектуры директивы запрета доступа не будут работать для IPv6. Для запрета доступа с IPv6-адресов необходимо удалить АААА-запись домена.
Разрешить доступ конкретным 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>, например:
<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 -bc ~/.htpasswd логин пароль
После выполнения команды в корневом каталоге вашего аккаунта будет создан файл .htpasswd, содержащий логин и хэш-сумму пароля. Если в дальнейшем вам потребуется изменить указанный пароль, снова используйте команду выше.
Перейдите в директорию, которую необходимо защитить паролем (например, это может быть директория wp-admin), и создайте в ней файл .htaccess со следующим содержимым, указав вместо u и user первую букву вашего логина и сам логин:
AuthType Basic AuthName "Authentication Required" AuthUserFile /home/u/user/.htpasswd require valid-user
Если речь идет о защите всего сайта в целом, эту конструкцию необходимо вставить в общий .htaccess-файл, размещенный в директории public_html вашего сайта.
Блокировка запросов по User-Agent
Можно ограничить доступ к сайту для определенных User-Agent. Например, при нежелательной активности ботов MJ12bot и SolomonoBot, используйте:
RewriteCond %{HTTP_USER_AGENT} (SolomonoBot|MJ12Bot) RewriteRule ^.*$ - [R=404,L]
Ограничения по видам запросов
Для применения ограничений для определенных методов запросов можно использовать блоки <Limit>:
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 и заключать их в блоки <RequireAll>:
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>
Индексная страница по умолчанию
Директива DirectoryIndex позволит вам указать страницу, которая будет отдаваться по умолчанию при обращении к директории, например:
DirectoryIndex new_index.html
Вы также можете указать несколько страниц, в этом случае сервер "пройдет" по списку слева направо и отобразит первую доступную страницу:
DirectoryIndex new_index.html index.html index.php
Собственные страницы ошибок
С помощью директивы ErrorDocument вы можете сообщить веб-серверу, какая страница должна отдаваться клиенту в случае возникновения определенной ошибки (403, 404, 500 и др.). Для этого необходимо указать номер ошибки и адрес нужной страницы:
ErrorDocument 500 http://domain.ru/errors/page500.html
Вы можете хранить файлы этих страниц как в корне сайта, так и в специально созданной папке, например, errors.
Кодировка
Указать кодировку по умолчанию (например, cp1251, utf-8, koi8-r) для всех выдаваемых страниц можно с помощью AddDefaultCharset, например:
AddDefaultCharset cp1251
При использовании PHP версии 5.6 и выше может потребоваться дополнительно указать:
php_value default_charset cp1251
Отображение листинга (содержимого директории)
Если индексный файл запрашиваемой клиентом директории недоступен, будет выведена ошибка "403 Forbidden". Если вместо этого необходимо отображение содержимого директории, потребуется добавить в .htaccess директиву:
Options +Indexes