Вопрос или проблема
Я пытался заблокировать общий доступ к родительскому каталогу, но не к подкаталогам внутри него. Права доступа к файлам в Linux, похоже, не позволяют это сделать, поэтому я пытался использовать .htaccess
, но безуспешно.
Что я пытаюсь сделать:
- Заблокировать общий доступ к
/uploads/secure
- но разрешить общий доступ к
/uploads/secure/public
.
Может кто-нибудь помочь?
Как вы догадываетесь, и как подтверждено в комментариях, вы не можете сделать это с помощью стандартных прав доступа в Linux без предоставления некоторого доступа к родительскому каталогу.
Вы можете сделать это, используя директивы Apache (.htaccess
). Однако из вашего вопроса неясно, нужен ли вам общий доступ ко всем “подкаталогам внутри него” или только к конкретному подкаталогу “/uploads/secure/public”, используемому в вашем примере. Эти решения лучше всего решать разными способами.
Хотя это можно сделать с помощью клиентских файлов .htaccess
, предпочтительнее использовать контейнеры <Directory>
в основной конфигурации сервера. (Хотя использование тега cpanel
предполагает “общий” сервер, поэтому это, вероятно, невозможно в вашем случае.)
Общий доступ только к одному подкаталогу:
В файле /uploads/secure/.htaccess
заблокируйте “общий” доступ к этому каталогу и всем подкаталогам:
# /uploads/secure/.htaccess
Require all denied
В подкаталоге, к которому вы хотите разрешить общий доступ, добавьте следующее, чтобы “переопределить” вышеуказанное:
# /uploads/secure/public/.htaccess
Require all granted
Доступ ко всем другим подкаталогам запрещен, если вы не создадите дополнительный файл .htaccess
для каждого из них (трудоемко поддерживать, если их много).
Общий доступ ко всем подкаталогам:
Если вам нужно защитить только родительский каталог и разрешить доступ ко всем подкаталогам, вы можете использовать выражение Apache (требуется Apache 2.4), чтобы нацелиться только на URL-путь родительского каталога (и все файлы в нем). Например, в родительском файле .htaccess
:
# /uploads/secure/.htaccess
<If "%{REQUEST_URI} =~ m#^(/[^/]+){2}/[^/]*$#">
Require all denied
</If>
Регулярное выражение ^/[^/]+/[^/]+/[^/]*$
соответствует только URL такого вида, как /<dir>/<dir>/
(например, только /uploads/secure/
будет применяться, поскольку файл .htaccess
находится в этом каталоге) или /<dir>/<dir>/<любоеимяфайла>
, поэтому ограничение не применяется к URL такого вида, как /upload/secure/<подкаталог>/<файл>
.
(Это легче всего достигается с использованием контейнеров <Directory>
в конфигурации сервера.)
Хотя если вы используете файлы .htaccess
, то вы можете выбрать поддержку только одного файла .htaccess
в корне документа, в этом случае вам нужно будет сделать регулярное выражение более специфичным. Например:
# /.htaccess
<If "%{REQUEST_URI} =~ m#^/uploads/secure/[^/]*$#">
:
Ответ или решение
Для решения задачи блокировки доступа к родительской директории /uploads/secure
при сохранении доступа к поддиректории /uploads/secure/public
можно использовать директивы Apache в файлах .htaccess
. Этот подход позволит вам гибко управлять доступом к различным директориям без изменения стандартных файловых разрешений Linux.
Задача
Ваша цель заключается в том, чтобы:
- Блокировать публичный доступ к
/uploads/secure
- Позволить публичный доступ только к
/uploads/secure/public
Решение
Блокировка доступа к родительской директории
В файле .htaccess
, расположенном в директории /uploads/secure
, нужно запретить доступ ко всем файлам и подкаталогам:
# /uploads/secure/.htaccess
Require all denied
Этот файл заблокирует публичный доступ ко всему в директории /uploads/secure
, включая поддиректории.
Разрешение доступа к специфической поддиректории
В поддиректории, куда вы хотите предоставить доступ, то есть /uploads/secure/public
, создайте файл .htaccess
со следующими настройками:
# /uploads/secure/public/.htaccess
Require all granted
Этот файл разрешает доступ только к директории /uploads/secure/public
, обходя глобальный запрет, установленный на уровене /uploads/secure
.
Пояснения
- Директивы Apache в .htaccess: Направлены на управление доступом в разрез с иерархией файловой системы. Это позволяет управлять доступом без изменения системных разрешений.
- Применение .htaccess: Хотя использование
<Directory>
контейнеров в главной конфигурации сервера Apache является более предпочтительным для управления доступом, на многих хостинг-платформах, таких как cPanel, пользователи ограничены в изменении глобальной конфигурации сервера, что делает.htaccess
единственным доступным решением.
SEO и Оптимизация
- Добавьте в описание вашего ресурса четкие ключевые слова, относящиеся к управлению доступом Apache и использованию файлов
.htaccess
. - Используйте теги и заголовки, такие как
<h2>
или<h3>
, чтобы структурировать информацию и сделать её более понятной для поисковых систем. - Убедитесь, что ваш сайт содержательно и логически структурирован, что также облегчит использование файла
.htaccess
для оптимального управления доступом.
Такое решение соответствует профессиональным стандартам и позволяет гибко управлять доступом к вашему контенту.