#Что означает проблема
После обновления Apache конфигурация или .htaccess с некорректной директивой Options может приводить к 500 Internal Server Error. Причины различаются: запрещённый контекст, неразрешённое переопределение в .htaccess, неверное сочетание вариантов, опечатка. Не каждый HTTP 500 связан с Options: диагноз ставится по конкретной строке error.log.
#Как различить причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Options запрещена в .htaccessAllowOverride допускает только другие группы настроек или исключает конкретные опции. | error.log прямо сообщает, что Options not allowed here либо option not allowed. | Изменить только допустимый набор Overrides или перенести нужную директиву в основной конфиг. |
| Неверная форма синтаксисаВ Options смешаны параметры с +/− и без знака или указан неизвестный вариант. | configtest либо журнал указывают на неверный параметр Options. | Исправить на допустимое явное перечисление. |
| Options задана в недопустимой секцииНапример, Options появилась внутри Files или FilesMatch в основном файле. | configtest показывает контекстную ошибку с номером строки. | Переместить в разрешённую секцию Directory по документации. |
#Подробная диагностика и устранение
- Установите время и адрес появления 500В браузере откройте страницу, где возникает HTTP 500, и проверьте код на вкладке «Сеть» (F12). Сравните с другой статической страницей сайта. Если 500 возникает только в одном каталоге, часто виноват расположенный там .htaccess. Если 500 на всех сайтах, причиной может быть общая конфигурация или PHP, поэтому не меняйте Options без подтверждения.
- Прочитайте конкретное сообщение, а не догадывайтесьПодключитесь по SSH, выясните error.log нужного виртуального хоста и выполните
sudo tail -n 100 /var/log/apache2/error.logлибо замените путь на заданный в ErrorLog. Ищите сообщения за момент теста:Options not allowed here,Option ... not allowed here,Illegal optionи путь/строку файла. Путь может указывать на .htaccess внутри подкаталога, а не на глобальную настройку. - Проверьте основную конфигурацию до измененияНа Debian/Ubuntu выполните
sudo apache2ctl configtest. Для ошибок глобального файла команда обычно показывает точный номер строки. Если Syntax OK, это не исключает ошибку разбора .htaccess при запросе — смотрите error.log. Проверьте версиюapache2 -v, поскольку синтаксис и допустимые области применения зависят от версии и сборки. - Найдите действующий контекст OptionsОткройте файл, указанный в ошибке, и соседние блоки
<Directory>,.htaccessиAllowOverride. У Apache директива Options допускается в конфигурации сервера, VirtualHost, Directory и .htaccess в разрешённом контексте, но не внутри Files/FilesMatch. Если Options написана в .htaccess, проверьте, разрешает ли родительский Directory такую группу и выбранные значения. - Исправьте синтаксис с минимальными полномочиямиДля добавления/удаления отдельных флагов используются
Options +FollowSymLinks -Indexesили другой набор в соответствии с задачей. Не смешивайте в одной строке варианты с префиксами и без них. Не используйтеOptions Allкак универсальное решение: можно случайно включить Indexes или иные нежелательные возможности. При сомнении оставьте текущую политику доступа, изменив лишь подтверждённый ошибочный параметр. - Не расширяйте AllowOverride без необходимостиЕсли Options необходима только в одном приложении, определите строго допустимые варианты через
AllowOverride Options=..., когда версия и конфигурация поддерживают такой синтаксис, либо перенесите директиву в защищённый основной файл.AllowOverride Allдля всего DocumentRoot открывает дополнительные возможности управления из .htaccess. На панелях хостинга используйте поддерживаемый путь настройки, иначе изменения исчезнут при следующем сохранении. - Сделайте копию и примените только проверенный вариантСохраните резервную копию изменяемого файла, затем выполните
sudo apache2ctl configtest. ПриSyntax OKвыполните reload Apache, если изменялась основная конфигурация; .htaccess обычно читается при запросе без reload. Если 500 сохранилась, проверьте новую запись журнала вместо последовательного включения всех Options. Для отката восстановите копию и повторите тест. - Проверьте страницу и ограниченияПовторите тот же URL, убедитесь, что вместо 500 получен штатный ответ. Проверьте, что URL каталога без index не начал показывать файлы, запрет приватных ресурсов действует, а PHP/CGI не исполняются в каталогах загрузок, если прежде были запрещены. Если проверка неудачна, откатите изменение и передайте одну конкретную строку error.log.
- Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить результат
Исходный URL больше не возвращает 500, в error.log нет сообщения о Options, страницы с закрытым доступом остаются закрытыми, листинг каталогов и лишние обработчики не включены.
#Если проблема не устранена
Если configtest проходит, но 500 возвращается только внутри каталога, проверяйте .htaccess при фактическом запросе. Если лог сообщает о PHP или правах, переходите к соответствующей причине, а не изменяйте Options.