Несколько разных заблуждений в вопросе.Следующий код PHP:
header("HTTP/1.0 500 Internal Server Error");
die();
Никогда не будет вызывать страницу ошибок Apache - она вызывает страницу ошибок вашего браузера по умолчанию.После того, как управление передано PHP, оно не возвращается к Apache для обработки ошибок.
ErrorDocument работает только для кодов ошибок, но не для кодов успеха.Он находится в документации
Syntax: ErrorDocument error-code document
http://httpd.apache.org/docs/current/mod/core.html#errordocument
Если вы ошиблись в одном виде страницы с ошибкой браузера за ошибку сервера, то это может быть причиной вашей основной проблемы.Если ваш пользовательский обработчик ошибок не выводит определенный объем данных, некоторые браузеры всегда будут отображать свои собственные страницы ошибок.Убедитесь, что размер выходных данных составляет не менее нескольких килобайт.
Причина вашей проблемы, скорее всего, заключается только в встроенном поведении Apache в сочетании с выбором тестовых URL-адресов.Из документов ErrorDocument:
Хотя большинство сообщений об ошибках могут быть переопределены, существуют определенные обстоятельства, когда внутренние сообщения используются независимо от настройки ErrorDocument.В частности, если обнаружен некорректный запрос, обычная обработка запроса будет немедленно остановлена, и будет возвращено внутреннее сообщение об ошибке.Это необходимо для защиты от проблем безопасности, вызванных неверными запросами.
Редактировать: Как смоделировать ошибку 500 в Apache.Моей первой мыслью были синтаксические ошибки в .htaccess
, но это не вызывало пользовательских обработчиков ошибок.Самым простым способом, который я нашел, было включить CGI в .htaccess
, добавив следующие строки:
ErrorDocument 500 /500.php
Options +ExecCGI
AddHandler cgi-script .pl
, а затем добавив сбой сценария perl:
#!/usr/bin/perl
safasfdsfdd_(*EYFIUOBAF(_*AS^FD_(*AWHD{
.уверен, что скрипт perl исполняется пользователем apache.Здесь показан мой пользовательский обработчик 500.
Однако вы вряд ли когда-либо будете запускать Apache 500 при использовании PHP, так что это, вероятно, бесполезный тест.