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

Что такое .htaccess

.htaccess — это файл конфигурации веб-сервера Apache, который применяется к текущей директории и всем вложенным каталогам. С его помощью можно:
  • запретить доступ к папкам;
  • настроить перенаправления;
  • управлять кэшированием;
  • включать сжатие;
  • ограничивать доступ по IP;
  • устанавливать пароль;
  • изменять обработку ошибок.

Где размещается файл .htaccess

Файл помещается непосредственно в каталог, который требуется защитить. Например:
public_html/ ├── images/ ├── uploads/ ├── private/ │ └── .htaccess └── index.php 
Все правила будут распространяться на папку private и ее содержимое.

Способ 1. Полностью запретить доступ к папке

Самый простой вариант — полностью закрыть каталог.
Require all denied 
При обращении к любой странице внутри папки сервер вернет ошибку:
403 Forbidden 

Для Apache 2.2

Если используется старая версия Apache:
Order Allow,Deny Deny from all 

Способ 2. Разрешить доступ только определенному IP

Require ip 203.0.113.25 
Доступ будет открыт только для указанного IP-адреса.

Несколько разрешенных IP

Require ip 203.0.113.25 Require ip 198.51.100.40 Require ip 192.0.2.18 

Разрешить подсеть

Require ip 192.168.1.0/24 
Будут разрешены все адреса указанной сети.

Способ 3. Защитить каталог паролем

Добавьте в .htaccess:
AuthType Basic AuthName "Private Area" AuthUserFile /home/user/.htpasswd Require valid-user 
После этого браузер будет запрашивать логин и пароль.

Создание файла .htpasswd

На сервере Linux выполните:
htpasswd -c /home/user/.htpasswd admin 
Введите пароль администратора.

Способ 4. Запретить просмотр содержимого каталога

Если в папке отсутствует файл index.php или index.html, Apache может показать список файлов. Отключить листинг можно так:
Options -Indexes 

Способ 5. Закрыть доступ только к определенным файлам

Например, запретить доступ к резервным копиям:
<FilesMatch "\.(sql|zip|tar|gz)$"> Require all denied </FilesMatch> 

Способ 6. Защитить конфигурационные файлы

<FilesMatch "(\.env|config\.php|settings\.php)$"> Require all denied </FilesMatch> 

Способ 7. Закрыть доступ к скрытым файлам

<FilesMatch "^\."> Require all denied </FilesMatch> 
Это защитит:
  • .env
  • .git
  • .svn
  • .htaccess
  • .htpasswd

Способ 8. Ограничить доступ по User-Agent

SetEnvIfNoCase User-Agent "BadBot" bad_bot <RequireAll> Require all granted Require not env bad_bot </RequireAll> 

Способ 9. Запретить доступ по Referer

RewriteEngine On RewriteCond %{HTTP_REFERER} badsite\.com [NC] RewriteRule .* - [F] 

Способ 10. Запретить доступ к каталогу uploads с выполнением PHP

Создайте файл:
wp-content/uploads/.htaccess 
Добавьте:
<Files *.php> Require all denied </Files> 
Это защитит сайт от выполнения вредоносных PHP-файлов, случайно загруженных в каталог.

Проверка конфигурации через PHP

<?php if (is_readable(".htaccess")) { echo ".htaccess найден"; } else { echo "Файл отсутствует"; } ?> 

Проверка существования каталога

<?php $dir = "private"; if (is_dir($dir)) { echo "Каталог существует"; } ?> 

Проверка прав доступа

<?php echo substr(sprintf('%o', fileperms('private')), -4); ?> 

Проверка ответа сервера

Используйте cURL:
curl -I https://example.com/private/ 
Если защита работает, сервер вернет:
HTTP/1.1 403 Forbidden 

Типичные ошибки

  • использование синтаксиса Apache 2.2 на Apache 2.4;
  • неверное расположение файла .htaccess;
  • отключенная поддержка AllowOverride в конфигурации Apache;
  • ошибки в синтаксисе директив;
  • неверный путь к файлу .htpasswd;
  • отсутствие проверки после внесения изменений.

Рекомендации по безопасности

  • закрывайте служебные каталоги;
  • не храните резервные копии в публичной директории сайта;
  • используйте авторизацию для административных разделов;
  • ограничивайте доступ по IP, если это возможно;
  • регулярно проверяйте права доступа к файлам;
  • обновляйте Apache и программное обеспечение сервера.

Чек-лист

  • ✓ Файл .htaccess находится в нужном каталоге.
  • ✓ Используется корректный синтаксис для версии Apache.
  • ✓ Просмотр содержимого каталога отключен.
  • ✓ Закрыт доступ к конфиденциальным файлам.
  • ✓ При необходимости настроена защита по IP.
  • ✓ Для важных разделов используется пароль.
  • ✓ Конфигурация проверена через браузер или cURL.

Заключение

Файл .htaccess предоставляет широкие возможности для защиты каталогов и файлов на сервере Apache. В зависимости от задач можно полностью закрыть доступ к папке, ограничить его по IP-адресам, настроить базовую HTTP-аутентификацию, запретить просмотр содержимого директорий и защитить отдельные типы файлов. Использование этих механизмов в сочетании с регулярными обновлениями сервера, правильными правами доступа и мониторингом безопасности значительно повышает уровень защиты веб-проекта.