错误500的Apache ErrorDocument无法正常工作

时间:2019-01-24 18:41:47

标签: apache .htaccess http apache2 web-hosting

我知道这可能是重复的,但是我有更好的细节。 我已将.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 :(得分:0)

500 Internal Server Error是一个非常普遍的错误。这表明服务器遇到了严重错误,根本无法正常处理请求。

.htaccess中定义为“晚期”的自定义错误文档根本无法捕获这500个错误中的许多错误。

如果在服务器配置中定义了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错误!严格来讲,尽管Apache documentation for the LimitInternalRecursion directive似乎将“内部重定向”和“子请求”分组,但ErrorDocument是通过内部子请求(不是内部重定向)提供的在一起。

除了在代码中触发它之外,我不能只想到触发500错误的另一种方法(如下所示-可以正常工作)。代码中的任何(致命)解析错误都会在每个请求中触发500错误。

RewriteRule ^foo$ - [R=500]

以上内容应照常为您的自定义500 ErrorDocument服务,ErrorDocument本身还可以。