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?
Это нормальное поведение, поскольку ошибки 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
в файле журнала во время загрузки страницы.