Я знаю, что это может быть дубликат, но у меня есть более подробные сведения.
У меня есть файл .htaccess, настроенный для отображения пользовательской страницы ошибок для наиболее распространенных ошибок:
# remove .php
RewriteEngine On
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]
#Add custom error pages
ErrorDocument 404 /errors/404
ErrorDocument 403 /errors/403
ErrorDocument 500 /errors/500
Когда я намеренно запускаю ошибку 500, он просто дает мне для этого страницу Apache по умолчанию, а также говорит: Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
Я могу получить доступ к странице с ошибкой, набрав localhost/errors/500, так что это не проблема с разрешениями. Перерыл много форумов, но решения не нашел.
Редактировать: Ошибка 500 была вызвана искаженным запросом модуля перезаписи. Если вы наберете example.com/index/, он попытается перейти на /index/.php, и это вызовет ошибку 500.
www.mydomain.com/index/ выдает ошибку из-за механизма перезаписи
Я запустил один в PHP. Я случайно удалил блок catch и оставил try. Вуаля хороший тестовый материал. Проблема в том, что я могу заставить 404 работать нормально, но не 500, что кажется довольно распространенным явлением.

Внутренняя ошибка сервера 500 — очень распространенная ошибка. Это указывает на то, что сервер обнаружил ошибку серьезный и просто не может обработать запрос в обычном режиме.
Многие из этих 500 ошибок просто не могут быть обнаружены с помощью пользовательского документа об ошибке, определенного как «поздний» в .htaccess.
У вас больше шансов, если ErrorDocument определен в конфигурации сервера. Но даже этого будет недостаточно скоро для некоторых ошибок.
Однако, сказав это...
...and also says:
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.I can access the error page by typing localhost/errors/500 so its not with the permissions.Edit: The error 500 was triggered from a malformed request by the rewrite engine. If you type
example.com/index/it tried to go to/index/.phpand that caused error 500
Похоже, что пытающийся служит для обслуживания пользовательского документа об ошибке (500), но это также приводит к ошибке 500.
В частности, запрос /index/ приводит к циклу перезаписи, т.е. /index/.php на /index/.php.php на /index/.php.php.php и т. д. Когда сервер достигает предела для внутренних перенаправлений (по умолчанию 10), он вызывает ошибку 500.
Да, я вижу это и для переписать петли. Несмотря на то, что ошибка не мешает обслуживанию ErrorDocument; сообщение, кажется, предполагает, что это так. Запрос документа об ошибке напрямую допустим.
Интересно (чисто гипотетически)... поскольку в этом запросе достигнут предел "внутренних перенаправлений" (из-за цикла перезаписи), ErrorDocument (который также обслуживается внутренним перенаправлением) не может быть обслужен, потому что этот предел уже достигнуто!? Таким образом, это вызывает ошибку 500 по той же причине! Строго говоря, ErrorDocument обслуживается через внутренний подзапрос (не внутреннее перенаправление), хотя Документация Apache для директивы LimitInternalRecursion, похоже, объединяет «внутренние перенаправления» и «подзапросы».
Я не могу просто придумать другой способ вызвать ошибку 500, кроме запуска ее в коде (как показано ниже - что работает нормально). Любой (фатальный) синтаксический анализ ошибок в коде вызывает ошибку 500 по запросу каждый.
RewriteRule ^foo$ - [R=500]
Вышеприведенное должно обслуживать ваш пользовательский 500 ErrorDocument как обычно, сам ErrorDocument в порядке.
Сначала я определил его в .htaccess. Все еще не работает.
Когда я говорю «поздно в .htaccess», я имею в виду, что сам .htaccess обрабатывается слишком поздно, независимо от того, где вы на самом деле поместили директиву в .htaccess. Обрабатывается основной конфиг сервера до.htaccess (на самом деле он обрабатывается при первом запуске сервера)
Ах да, я вижу, что вы сейчас говорите о дополнительном сообщении относительно обслуживания ErrorDocument. Я обновил свой ответ.
Можете ли вы объяснить строку, которую вы разместили. Что я должен положить в foo?
Это всего лишь способ запустить (т.е. протестировать) ваш собственный 500 ErrorDocument. Если вы запрашиваете /foo (он не обязательно должен существовать), вы должны увидеть свой собственный файл 500 ErrorDocument.
Что мне нужно сделать, чтобы страница с ошибкой 500 отображалась, если кто-то вводит /index/
К сожалению, я не думаю, что вы можете (согласно моему «гипотетическому» объяснению выше). Однако ввод этого URL-адреса никогда не должен вызывать ошибку 500 — вам нужно исправить свой код. Конечный пользователь никогда не должен видеть ошибку 500 при нормальном использовании. Вам нужно исправить ваши директивы mod_rewrite, чтобы /index/ не запускал цикл перезаписи (это другая проблема).
Как вы «преднамеренно вызываете ошибку 500»?