Ситуация
В корне сайта временно лежит каталог с файлами, которые нужно сохранить и скачать по 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-доступа.