#Симптом и границы применимости
Главная динамическая страница может загружаться, но статические файлы получают Forbidden, если у рабочих процессов нет права пройти по каталогам либо прочитать файл. Ошибка может быть также вызвана deny-правилами, а не только POSIX-правами.
Эта инструкция относится к конкретному сайту в панели управления хостингом, когда его обслуживают Nginx, Apache, PHP-FPM или их сочетание. Названия разделов и доступность SSH зависят от установленной панели и прав пользователя; шаги, которых нет в вашем интерфейсе, выполняет администратор сервера.
#Возможные причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не хватает прохода по каталогуУ родительской директории отсутствует x для пользователя веб-сервера | namei показывает закрытое звено пути | Исправить только нужную директорию/группу |
| Запрещён сам файлРежим/владелец запрещает чтение | 403 при прямом запросе и permission denied в error_log | Уточнить пользователя и предоставить минимальное чтение |
| Правило веб-сервераdeny, location или .htaccess блокирует путь | Права правильные, но в журнале access forbidden by rule | Найти и исправить конкретное правило |
#Пошаговая диагностика и исправление
- Проверьте конкретный ресурсВ F12 → «Сеть» найдите один CSS/JS с 403. Скопируйте только путь файла без параметров с секретами. Проверьте запрос прямым URL и время ошибки; не делайте массовых правок всего сайта.
- Найдите соответствующий файл на дискеВ панели выберите нужный сайт и выясните его document root. Для статических файлов учтите alias, символьные ссылки и отдельные каталоги медиа. Соотнесите публичный URL с фактическим путём, не предполагая, что они всегда совпадают.
- Исследуйте каждый компонент путиНа сервере примените namei -l к реальному пути. Права x нужны для перехода через каждый каталог; это не то же самое, что чтение списка файлов.Linux · Терминал (Bash)КомандаSSH, обычно без прав администратора. Путь замените реальным; команда ничего не меняет.
namei -l /var/www/site/public/assets/app.css
- Сверьте пользователя и журналВ панели или командой ps выясните пользователя веб-процесса и PHP-FPM для этого сайта. Убедитесь, что именно процесс, который отдаёт статику, имеет необходимый доступ. При ошибке от WAF или deny права файлов могут быть нормальными.
- Восстановите минимальные праваДля собственных файлов используйте штатную настройку владельца/группы панели или измените разрешения только конкретного каталога по выбранной модели доступа. Обычно каталогам нужен проход, файлам — чтение; запретите доступ к секретным файлам. Не используйте chmod -R 777 и глобальный chown.
- Проверьте политику безопасностиЕсли права выглядят правильными, изучите контекст SELinux/AppArmor, запрет символьных ссылок и правила location/.htaccess. Не отключайте модуль безопасности целиком; при необходимости исправляйте адресно.
- Проверьте статику и закрытые файлыЗапросите проблемный CSS повторно, затем убедитесь, что закрытые каталоги, служебные конфигурации и резервные копии по-прежнему недоступны из интернета. При ухудшении верните сохранённые права.
#Проверка результата
Ресурсы отдаются с ожидаемым кодом 200, а доступ к секретным и закрытым каталогам остаётся запрещён.
#Если проблема осталась
Если 403 возникает без обращения к файлу, проверяйте порядок location/alias, правила защиты и права внешнего CDN отдельно.
#Безопасный откат
Если после изменения ошибка усилилась, верните сохранённое значение только изменённого параметра и повторно проверьте конфигурацию используемого веб-сервера до применения. Не возвращайте всю базу или весь сервер из резервной копии, если достаточно откатить одну настройку. При отсутствии доступа к нужному уровню обратитесь к администратору с точными временем, адресом, кодом ответа и обезличенными фрагментами журналов.