我知道这可能是重复的,但是我有更好的细节。
我已将.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。
答案 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本身还可以。