php – Apache的ErrorDocument指令不重定向

前端之家收集整理的这篇文章主要介绍了php – Apache的ErrorDocument指令不重定向前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的.htaccess文件中有一堆ErrorDocument指令,以捕获几乎所有可能的错误,Apache可能会抛出一个用户,并将所有用户重定向到我的错误控制器,然后再以更友好的方式呈现错误.但是,它似乎没有工作.

例如,当我输入一个无效的URL,如mysite.com/\”\”##$##$!我总是得到Apache的默认403错误消息,而不是重定向到我的errors.PHP文件.以下是我使用的指令.我需要做任何其他事情来使其发挥作用吗? (AllowOverride全部设置)

ErrorDocument 403 /errors.PHP

如果这是绝对的自定义错误处理的错误方式,请让我知道,我会感谢向正确的方向微调.

谢谢!

编辑:
哦,只是想我会提到这个.我编写了自己的MVC结构来重定向请求,并且它的效果很好.从PHP内部,如果用户请求不必要的URL,我自己的404错误将会正常启动(或者我已经定义的任何其他错误).所以基本上,如果我进入mysite.com / !!!!进入URL,它将工作,我得到一个404.但是,每当我使用双引号字符启动请求时,默认的Apache 403错误将触发.奇.此外,500错误将无法重定向到errors.PHP,并将简单地返回一个默认的Apache 500屏幕(例如,当使用标头测试(“HTTP / 1.0 500内部服务器错误”); die();) .

编辑3:我刚刚尝试在.htaccess文件中放置ErrorDocument 200“message”,没有任何事情发生,我打开的任何页面都会正常打开.最糟糕的情况是,这应该会陷入无限循环.最好的情况,应该输出“消息”.它没有,它只是忽略了ErrorDocument. Apache的访问日志注意到一个正常的200 OK标题,但它完全被.htaccess忽略.

在这个问题上有一些不同的误解.以下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文档:

Although most error messages can be
overriden,there are certain
circumstances where the internal
messages are used regardless of the
setting of ErrorDocument. In
particular,if a malformed request is
detected,normal request processing
will be immediately halted and the
internal error message returned. This
is necessary to guard against security
problems caused by bad requests.

编辑:如何在Apache中模拟500错误.我的第一个想法是.htaccess中的语法错误,但这不会触发自定义错误处理程序.我发现最简单的方法是通过添加以下行来启用.htaccess中的CGI:

ErrorDocument 500 /500.PHP
Options +ExecCGI
AddHandler cgi-script .pl

然后添加一个崩溃的perl脚本:

#!/usr/bin/perl
safasfdsfdd_(*EYFIUOBAF(_*AS^FD_(*AWHD{

您需要确保perl脚本可以由apache的用户执行.这显示了我的自定义500处理程序.

但是,您在使用PHP时不太可能触发Apache 500,所以这可能不是一个有用的测试.

猜你在找的PHP相关文章