Apache LinuxApache HTTP Server 2.4

Apache: каталог Alias открывается, а вложенные файлы получают 403

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

Когда Alias указывает на каталог вне DocumentRoot, как отличить ограничение Directory, права прохода и неверное сопоставление путей.

В этой статье
  1. Что означает проблема
  2. Как различить причины
  3. Подробная диагностика и устранение
  4. Как проверить результат
  5. Если проблема не устранена

#Что означает проблема

Директива Alias сопоставляет URL с физическим каталогом, который может находиться вне DocumentRoot. Разрешения, действующие на прежний DocumentRoot, автоматически не распространяются на новый путь. Если страница /assets/ открывается, а /assets/file.pdf получает 403, проверяйте целевую директорию, правила доступа и права на файл. Включать листинг каталога для исправления не нужно.

#Как различить причины

Возможная причинаКак узнатьЧто делать
Нет разрешения в Directory для цели AliasПуть Alias вне разрешённого дерева или более специфичное правило ограничивает вложенные папки.В error.log отказ client denied by server configuration.Настроить доступ только к публичному пути назначения Alias.
Отсутствуют права на родительские каталогиПроцесс Apache не может пройти по одному из компонентов пути.В error.log Permission denied и разные результаты для отдельных вложений.Проверить каждый компонент namei -l, исправить точечно.
Не совпадают косые черты и путиAlias /media/ указывает на физический путь, где структура отличается от ожидаемой.Главный URL работает, а вложенные обращаются не к тем файлам.Проверить пару URL → фактический путь и соглашение о завершающем /.

#Подробная диагностика и устранение

  1. Запишите URL, который действительно запрещёнОткройте в браузере точный адрес вложенного публичного файла, например /assets/manual.pdf, и зафиксируйте 403 и время. Сравните с соседним известным ресурсом и адресом каталога. Не проверяйте доступ на секретных или пользовательских документах: сначала выясните, предназначен ли файл для публичной выдачи.
  2. Найдите соответствующий AliasПо SSH в Debian/Ubuntu выполните sudo apache2ctl -S, откройте файл нужного VirtualHost и найдите Alias для пути. Например, Alias "/assets/" "/srv/example/assets/" означает, что /assets/manual.pdf должно находиться по /srv/example/assets/manual.pdf. У пары путей с завершающим слешем правила сопоставления отличаются от пути без него; не меняйте их без проверки зависимых ссылок.
  3. Проверьте файл и доступ по всей цепочкеВыполните sudo ls -l /srv/example/assets/manual.pdf и namei -l /srv/example/assets/manual.pdf, заменив оба пути реальным адресом. Убедитесь, что ресурс существует, а Apache может пройти через родительские директории. Право x нужно на каталогах, r — на файле. Не делайте chmod 777 и не отдавайте Apache права записи, если он должен только читать файлы.
  4. Прочитайте причину запрета в журналеОткройте error.log VirtualHost на время запроса. Сообщение client denied by server configuration требует проверки Require, <Directory>, <Location> и правил авторизации. Сообщение Permission denied указывает на доступ ОС. Если ошибок нет, выясните, не блокирует ли URL Nginx или приложение до Apache. Не отключайте защиту общего каталога для диагностики.
  5. Разрешите доступ именно к целевой публичной папкеЕсли ресурс предназначен для всех, создайте в конфигурации соответствующий <Directory "/srv/example/assets"> Require all granted ... </Directory>. Этот блок адресует физическую папку после Alias. Используйте Options -Indexes, если список содержимого папки не должен выводиться. Для вложенного приватного раздела задайте отдельные ограничения; не расширяйте доступ ко всему /srv.
  6. Проверьте правила более поздних секцийЕсли основной Directory разрешает доступ, но вложенный ресурс запрещён, найдите дополнительные <Directory>, <FilesMatch>, <Location> и правила .htaccess. Секции применяются в определённом порядке; более позднее правило может перекрывать раннее. Изменяйте только то правило, которое соответствует нужному URL; не убирайте ограничения для исполняемых и секретных типов файлов.
  7. Сделайте копию, проверку и осторожное применениеПеред правкой сохраните точный файл конфигурации. Выполните sudo apache2ctl configtest; если есть Syntax OK, sudo systemctl reload apache2. Если 403 сменился на 500 или другие URL стали открываться без прав, сразу восстановите копию, повторите configtest и reload. На системах с SELinux/AppArmor отдельно проверьте действующие политики доступа, не выключая их.
  8. Протестируйте вложенный файл и закрытые областиПовторите запрос к известному публичному вложению, убедитесь в 200 либо ином ожидаемом коде и правильном типе содержимого. Проверьте, что запрашивание каталога без index не раскрывает список файлов, а приватная подпапка по-прежнему закрыта. При несовпадении результата перепроверьте фактический путь Alias и журналы.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1SSH Debian/Ubuntu; замените путь на существующий, namei показывает права всех компонентов.
    Linux · Терминал (Bash)КомандаНужен sudo
    SSH Debian/Ubuntu; замените путь на существующий, namei показывает права всех компонентов. Первая и последняя команды требуют sudo только при особенностях доступа.
    sudo apache2ctl -S
    namei -l /srv/example/assets/manual.pdf
    sudo apache2ctl configtest
    Вариант 2Пример для специально подготовленной ПУБЛИЧНОЙ папки, не для закрытых данных; физический путь должен быть п…
    Текст
    Пример для специально подготовленной ПУБЛИЧНОЙ папки, не для закрытых данных; физический путь должен быть проверен.
    Alias "/assets/" "/srv/example/assets/"
    <Directory "/srv/example/assets">
        Require all granted
        Options -Indexes
    </Directory>

#Как проверить результат

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

#Если проблема не устранена

Если Apache продолжает возвращать 403, проверьте точный целевой физический путь, все родительские каталоги, более специфичные правила Directory/Files/Location, а также политики защиты ОС. Не делайте рекурсивную смену прав вслепую.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.