Apache Error AH01276: Cannot serve directory No matching DirectoryIndex — Решение
При обращении к корневому URL или директории сайта веб-сервер возвращает ошибку 403 Forbidden. В системном журнале error.log регистрируется отказ модуля каталогов: [autoindex:error] [pid 1234:tid 5678] [client ...] AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.html, index.php) found, and server-generated directory index forbidden by Options directive.
| Причина отказа | Состояние каталога | Результат для пользователя |
|---|---|---|
| Отсутствует индексный файл | В папке нет index.html, index.php | HTTP 403 Forbidden |
Отключен листинг (-Indexes) | Директива Options -Indexes активна | Запрещен автогенератор списка файлов |
Опечатка в DirectoryIndex | Индексный файл назван home.html или app.php | Apache не знает, какой файл открывать по умолчанию |
- Пользователь видит стандартную страницу «403 Forbidden: You don't have permission to access this resource».
- Прямое обращение к конкретному файлу (например,
/image.png) при этом работает штатно.
- Проверьте физическое наличие индексного файла в корневой директории сайта:
ls -la /var/www/html/ - Если главный файл называется нестандартно (например,
app.php,default.html,index.htm), настройте директивуDirectoryIndexв/etc/apache2/mods-available/dir.confили в блоке<Directory>виртуального хоста:<IfModule mod_dir.c> DirectoryIndex index.php index.html index.htm default.html app.php </IfModule> - Если вам требуется отображать листинг файлов (содержимое папки) при отсутствии индексного файла, включите опцию
Indexes:<Directory /var/www/html> Options +Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> - Проверьте права на чтение каталога и файлов для системного пользователя веб-сервера:
sudo chown -R www-data:www-data /var/www/html sudo chmod 755 /var/www/html sudo chmod 644 /var/www/html/* - Проверьте синтаксис и перезагрузите веб-сервер:
sudo apache2ctl configtest && sudo systemctl reload apache2
Indexes рекомендуется всегда держать отключенной (Options -Indexes). Включение листинга файлов позволяет злоумышленникам сканировать структуру папок и находить забытые бэкапы, файлы конфигураций .env и дампы баз данных.Частые вопросы (FAQ)
Почему при ошибке AH01276 возвращается статус 403, а не 404?
Потому что сама директория существует, но Apache запрещено как показывать список файлов (из-за -Indexes), так и открывать дефолтный индекс (так как подходящий DirectoryIndex не найден). С точки зрения сервера доступ к объекту 'каталог' запрещен.
Как задать разные DirectoryIndex для разных подкаталогов?
Директиву DirectoryIndex можно переопределять внутри отдельных блоков <Directory>, <Location> или прямо в локальных файлах .htaccess.
Почему после деплоя нового сайта на Laravel/Symfony появляется AH01276?
Потому что DocumentRoot в виртуальном хосте настроен на корень проекта, а не на поддиректорию public/, в которой фактически лежит index.php.
Какой модуль отвечает за обработку DirectoryIndex?
За обработку индексных файлов отвечает встроенный модуль mod_dir (включается командой sudo a2enmod dir).