Apache ErrorDocument для ошибки 500 не работает - PullRequest
0 голосов
/ 24 января 2019

Я знаю, что это может быть дубликат, но у меня есть детали получше.У меня есть файл .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.

1 Ответ

0 голосов
/ 24 января 2019

A 500 Internal Server Error - очень общая ошибка. Это указывает на то, что сервер обнаружил серьезную ошибку и просто не может обработать запрос как обычно.

Многие из этих 500 ошибок просто не могут быть обнаружены с помощью специального документа с ошибкой, определенного как "поздний" в .htaccess.

У вас больше шансов, если в конфигурации сервера определено ErrorDocument. Но даже этого будет недостаточно для некоторых ошибок.

Однако, сказав, что ...

... а также говорит: 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

Похоже, пытается обработать пользовательский (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 в порядке.

...