Apache не отображает пользовательскую страницу ошибок 500 для ошибок php
Apache не хочет отображать пользовательский документ об ошибках, который я настроил.
У меня во хоре
DocumentRoot /var/www/site/public
...
ErrorDocument 500 /500.html
500.html находится в /var/www/site/public/500.html
Чтобы проверить это, я только что создал сломанную страницу php, которая возвращает заголовок 500, но страница пуста. Я подозреваю, что это результат того, что php генерирует 500 страниц, а не apache. Итак, как мне заставить php показать мой собственный документ об ошибках apache?
1 ответ
Это нормальное поведение, так как ошибки PHP не считаются ошибками сервера 5xx. Согласно RFC 7231
6.6. Ошибка сервера 5xx
Класс кода состояния 5xx (Ошибка сервера) указывает, что сервер знает, что он допустил ошибку или не может выполнить запрошенный метод. - -
6.6.1. 500 - внутренняя ошибка сервера
Код состояния 500 (Внутренняя ошибка сервера) указывает, что сервер обнаружил непредвиденное состояние, которое не позволило ему выполнить запрос.
Ошибки PHP всегда должны быть исправлены, так как они могут создать проблемы с безопасностью. По той же причине лучшая практика в обработке ошибок php - регистрировать их, чтобы программисты могли их просматривать и скрывать от пользователей. Этот вид установки будет (в формате php.ini):
error_reporting = E_ALL
log_errors = On
display_errors = Off
Это будет регистрировать ошибки в журнале ошибок веб-сервера или в другом настроенном журнале ошибок. Вместо того, чтобы читать их с сайта, вы можете выполнить tail -f
в файле журнала во время загрузки страницы.