如何检测哪个页面导致内部服务器错误?

时间:2010-07-11 05:34:41

标签: php .htaccess redirect http-referer

所以,在我的.htaccess文件中,我有这个ErrorDocument行:

ErrorDocument 500 http://www.example.com/500

由于我的服务器运行来自相同核心文件的多个网站,我只想将所有内部服务器错误重定向到同一个处理页面。但是,我的问题是它不会发送有关导致错误的页面的任何信息,它会重定向页面。我尝试将其更改为ErrorDocument 500 index.php?500,但这只会在尝试查找文件时导致第二个内部服务器错误。有关如何成功将其重定向到我的自定义500错误页面并仍然获取有关导致错误的页面的信息的任何想法?

4 个答案:

答案 0 :(得分:3)

ErrorDocument语句中,您将提供远程页面的URL。结果,Apache向用户发送了一个Location头,用户以他们的快乐方式开始。

而是将URL更改为将处理错误的本地脚本的绝对路径:

ErrorDocument 500 /500.php

应该使用一组以REDIRECT_开头的环境变量启动脚本,该变量应该包含错误中涉及的各种路径和查询字符串。

无法将用户发送到其他地方,也无法捕获ErrorDocument本身内的信息。另一方面,如果您仍希望出于某种原因以这种方式处理信息,那么您的脚本可以捕获信息然后重定向用户。

答案 1 :(得分:1)

您可以随时查看http请求的referrer字段,以确定调用者之前的URL

答案 2 :(得分:0)

检查您的网络服务器的访问日志。在那里,您将能够看到导致500响应代码的请求。

在Apache中(使用默认日志格式),成功的请求(200 OK)可能如下所示:

127.0.0.1 - - [19/Jul/2010:18:25:54 +0200] "GET / HTTP/1.1" 200 663 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"

产生500的请求可能如下所示:

127.0.0.1 - - [19/Jul/2010:18:24:37 +0200] "GET / HTTP/1.1" 500 631 "-" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.8pre) Gecko/20100718 Ubuntu/10.04 (lucid) Namoroka/3.6.8pre"

响应代码位于第六列。

您还可以检查您的PHP错误日志,其中包含所有PHP错误,假设您已启用错误日志记录(您应该)。

答案 3 :(得分:0)

您的apache服务器记录每个错误发生(虽然它是可配置的)。您可以在PHP网站中使用FileStream打开并管理此文件。请参阅http://httpd.apache.org/docs/2.2/logs.html以查看有关Apache日志文件的更多信息。您可以从http://www.freewebmasterhelp.com/tutorials/htaccess/获得有关.htaccess的教​​程。

要进行自己的处理,请创建一个像error.php这样的PHP文件,它将处理您的错误。您可以使用.htaccess文件重定向它。之后,如果您想要转到某个页面,可以使用header()方法执行此操作。