Swa*_*der 13 php apache error-handling custom-error-pages errordocument
我在.htaccess文件中有一堆ErrorDocument指令,以便捕获Apache可以向用户抛出的几乎所有可能的错误,并将所述用户重定向到我的错误控制器,然后以更加用户友好的方式呈现错误.但是,它似乎不起作用.
例如,当我输入无效的网址时,例如mysite.com/""##$##$!我总是得到Apache的默认403错误消息,而不是重定向到我的errors.php文件.以下是我正在使用的指令.我需要做任何其他事情来使它工作吗?(已设置AllowOverride All)
ErrorDocument 403 /errors.php
Run Code Online (Sandbox Code Playgroud)
如果这是接近绝对自定义错误处理的错误方法,请告诉我,我将非常感谢在正确的方向上轻推.
谢谢!
编辑:哦,我以为我会提到这个.我编写了自己的MVC结构来重定向请求,它运行良好.从PHP内部,如果用户请求不存在的URL,我自己的404错误将被解雇(或者我已经定义的任何其他错误).所以基本上,如果我进入mysite.com/!!!! 进入URL,它将工作,我得到一个404.但是,每当我用双引号字符启动一个请求时,默认的Apache 403错误就会触发.奇.此外,500错误也将无法重定向到errors.php,并且只会返回默认的Apache 500屏幕(例如,使用标头测试时("HTTP/1.0 500内部服务器错误"); die();) .
编辑3:我刚尝试放入ErrorDocument 200 "message"我的.htaccess文件,没有任何反应,我打开的任何页面都正常打开.最糟糕的情况是,这应该陷入无限循环.最好的情况,它应该输出"消息".它没有做,它只是忽略了ErrorDocument.Apache的Access Log记录了一个普通的200 OK标题,然而.htaccess完全忽略了它.
Cal*_*Cal 27
这个问题中有一些不同的误解.以下PHP代码:
header("HTTP/1.0 500 Internal Server Error");
die();
Run Code Online (Sandbox Code Playgroud)
永远不会触发Apache错误页面 - 它会触发浏览器的默认错误页面.一旦控制权交给PHP,它就不会回到Apache进行错误处理.
ErrorDocument仅适用于错误代码,而不适用于成功代码.它在文档中
Syntax: ErrorDocument error-code document
Run Code Online (Sandbox Code Playgroud)
http://httpd.apache.org/docs/current/mod/core.html#errordocument
如果您误将某种浏览器错误页面误认为是服务器错误,那么这也可能是导致您遇到主要问题的原因.除非您的自定义错误处理程序输出一定数量的数据,否则某些浏览器将始终显示自己的错误页面.确保您的输出至少为几千字节.
您的问题的原因很可能只是Apache的内置行为与您选择的测试URL相结合.从ErrorDocument文档:
尽管可以覆盖大多数错误消息,但在某些情况下,无论ErrorDocument的设置如何,都会使用内部消息.特别是,如果检测到格式错误的请求,将立即停止正常的请求处理并返回内部错误消息.这是防止由不良请求引起的安全问题所必需的.
编辑:如何在Apache中模拟500错误.我的第一个想法是语法错误.htaccess,但这不会触发自定义错误处理程序.我发现最简单的方法是.htaccess通过添加以下行来启用CGI :
ErrorDocument 500 /500.php
Options +ExecCGI
AddHandler cgi-script .pl
Run Code Online (Sandbox Code Playgroud)
然后添加崩溃的perl脚本:
#!/usr/bin/perl
safasfdsfdd_(*EYFIUOBAF(_*AS^FD_(*AWHD{
Run Code Online (Sandbox Code Playgroud)
您需要确保perl脚本可由apache的用户执行.这显示我的自定义500处理程序.
但是,在使用PHP时,您不太可能触发Apache 500,因此这可能不是一个有用的测试.
| 归档时间: |
|
| 查看次数: |
11911 次 |
| 最近记录: |