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 в файле журнала во время загрузки страницы.

Другие вопросы по тегам