Ситуация

В корне сайта временно лежит каталог с файлами, которые нужно сохранить и скачать по FTP или SSH. При этом прямой адрес вида https://example.com/private/ не должен открываться в браузере.

Права на файлы и правила HTTP-доступа решают разные задачи. Если убрать файловое право чтения, скачивание по FTP тоже может перестать работать. Здесь достаточно запретить доступ на уровне веб-сервера.

Решение для Apache 2.4

Внутри закрываемого каталога создайте файл .htaccess:

Require all denied

Это правило применяется к HTTP-запросам к каталогу и его содержимому. FTP и SSH работают через другие службы и продолжают использовать свои обычные права доступа к файлам.

Проверка

Проверьте не только адрес каталога, но и адрес конкретного файла:

https://example.com/private/
https://example.com/private/document.zip

Оба запроса должны вернуть 403 Forbidden. Затем проверьте, что тот же файл по-прежнему скачивается через FTP или SSH.

Если правило не сработало

  • Убедитесь, что сайт действительно обслуживает Apache и для каталога разрешены правила .htaccess.
  • Проверьте точное имя файла: .htaccess, без добавленного расширения .txt.
  • Если сайт обслуживает Nginx без Apache, настройте запрет в конфигурации Nginx: этот файл он не читает.
  • Проверьте отдельные архивы в корне сайта. Запрет каталога не закрывает ZIP, лежащий вне него.

Для временного архива в корне Apache можно добавить в корневой .htaccess отдельное правило:

<Files "private-archive.zip">
  Require all denied
</Files>

После изменения снова проверьте прямой HTTP-адрес архива и скачивание по FTP. Ответ 403 подтверждает только запрет через веб; он не говорит о состоянии FTP-доступа.