Создание и настройка .htaccess

Общие сведения

Файл .htaccess — это конфигурационный файл веб-сервера Apache. В нём можно настроить перенаправления, поменять параметры PHP, установить права доступа к файлам и каталогам, задать собственные страницы ошибок и многое другое.

Директивы в этом файле будут действовать только на каталог, в котором размещен файл, и также на все подкаталоги. Внутри подкатологов можно создавать дополнительные файлы .htaccess, тогда они переопределят предыдущие настройки.

Создание и редактирование .htaccess

Вы можете создать файл настроек .htaccess при помощи файлового менеджера в панели управления.

  1. Перейдите в раздел «Файловый менеджер»
  2. Нажмите кнопку «Создать файл»
  3. Введите имя «.htaccess»
  4. Нажмите кнопку «Создать»

Если вы получаете ошибку «Файл или директория с таким именем уже существует», проверьте, что вы находитесь в директории нужного сайта. Если все верно, то можно использовать уже созданный файл.

Для редактирования файла нажмите по нему два раза левой кнопкой мыши. После этого откроется новая вкладка, в которой можно вносить изменения. Когда закончите редактировать, нажмите «Сохранить».

Вы также можете редактировать .htaccess во внешних редакторах, а потом загрузить на хостинг в нужный сайт.

Предупреждаем, что некоторые текстовые редакторы Windows (например, «Блокнот») добавляют в начало документов BOM-сигнатуры. Веб-серверы могут неправильно прочитать файл с такой сигнатурой, поэтому советуем использовать «Файловый менеджер» или редактор «Notepad++».

Примеры настроек

Перенаправления

Настройка редиректов описана в отдельной статье: Типовые перенаправления.

Параметры PHP

Настройка параметров PHP описана в отдельной статье: Настройка параметров PHP.

Защита сайта паролем

Сначала нужно создать файл, в котором будет храниться логин и пароль. Подключитесь по SSH и выполните команду ниже, указав нужные значения.

htpasswd -bc ~/.htpasswd логин пароль

После этого в домашнем каталоге появится файл .htpasswd, содержащий логин и захешированный пароль. Если вам в будущем нужно будет изменить пароль, выполните команду еще раз.

Перейдите в директорию, которую нужно защитить паролем. Например, это может быть директория wp-admin или bitrix/admin. Создайте в ней файл .htaccess со следующим содержимым, заменив u и user на первую букву вашего логина и сам логин.

AuthType Basic
AuthName "Authentication Required"
AuthUserFile /home/u/user/.htpasswd
Require valid-user

Если нужно закрыть паролем весь сайт, разместите .htaccess в директории public_html.

Блокировка запросов по IP

Ограничить доступ к сайту для IPv4 или IPv6 адресов можно с помощью директив Allow, Deny или Require (появился после Apache 2.4). Мы рекомендуем использовать новый Require.

Запретить доступ конкретным адресам, разрешить всем остальным:

<RequireAll>
Require not ip 1.1.1.1 # ipv4
Require not ip 1:2:3:4:5:6:7:8 # ipv6
Require all granted
</RequireAll>

Разрешить доступ конкретным адресам, запретить всем остальным:

<RequireAny>
Require ip 1.2.3.4 # ipv4
Require ip 1:2:3:4:5:6:7:8 # ipv6
Require all denied
</RequireAny>

Вместо конкретных адресов вы можете указывать подсети:

1.2.3.0/24 # ipv4
1:2:3:4:0:0::/64 # ipv6

Блокировка запросов по User-Agent

Чтобы защитить сайт от нежелательных ботов, вы можете заблокировать их по User-Agent. На каждый из них нужно будет добавить строку по примеру.

SetEnvIfNoCase User-Agent "^Bandit" bad_bot
SetEnvIfNoCase User-Agent "^Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "^BatchFTP" bad_bot
SetEnvIfNoCase User-Agent "^Bigfoot" bad_bot
SetEnvIfNoCase User-Agent "^Black.Hole" bad_bot

<RequireAll>
Require not env bad_bot
Require all granted
</RequireAll>

Будьте аккуратны с блокировкой wget или curl, так как вы можете использовать их в своих Cron-задачах. Например, исполнитель «HTTP-запрос» использует wget.

Индексная страница по умолчанию

Директива DirectoryIndex позволит вам указать страницу, которая будет отдаваться по умолчанию при обращении к директории.

DirectoryIndex custom.html

Вы также можете указать несколько страниц, в этом случае сервер «пройдет» по списку слева направо и отобразит первую доступную страницу:

DirectoryIndex custom.html index.html index.php

Собственные страницы ошибок

Директивой ErrorDocument можно указать, какую страницу возвращать в случае ошибки 403, 404, 500 и так далее.

ErrorDocument 404 /errors/404.html

Перед этим проверьте, возможно, ваша CMS поддерживает функцию создания страниц ошибок. Внутри CMS вы сможете настроить всё более гибко.

Кодировка

Пример изменения кодировки на CP1251:

AddDefaultCharset cp1251
php_value default_charset cp1251

По умолчанию на хостинге используется UTF-8.

Отображение листинга (содержимого директории)

По умолчанию, если в директории нет индексного файла, запрос на неё вернет 403 ошибку. Чтобы вместо этого вывести содержимое директории, напишите:

Options +Indexes
IndexOptions Charset=UTF-8