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

Php 如何检测导致内部服务器错误的页面?,php,.htaccess,redirect,http-referer,Php,.htaccess,Redirect,Http Referer,因此,在.htaccess文件中,我有以下错误文档行: ErrorDocument 500 http://www.example.com/500 因为我的服务器从同一个核心文件运行多个网站,所以我只想将所有内部服务器错误重定向到同一个处理页面。但是,我的问题是,它没有发送任何有关导致错误的页面的信息,而是重定向页面。我尝试将其更改为ErrorDocument 500 index.php?500,但这只会在尝试查找文件时导致第二个内部服务器错误。关于如何成功地将其重定向到自定义的500错误页面,

因此,在.htaccess文件中,我有以下错误文档行:

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

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

检查您的Web服务器的访问日志。在那里,您将能够看到导致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"
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"
结果为500的请求可能如下所示:

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"
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错误,假设您已启用错误日志记录(您应该这样做)。

ErrorDocument
语句中,您提供了远程页面的URL。结果,Apache向用户发送一个Location头,用户就可以随心所欲了

相反,将URL更改为将处理错误的本地脚本的绝对路径:

ErrorDocument 500 /500.php
启动脚本时,应使用一组以REDIRECT_uu开头的环境变量,这些变量应包含错误中涉及的各种路径和查询字符串


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

您可以始终查看http请求的
referer
字段,以确定调用方在apache服务器记录每一个错误发生之前是在哪个URL上(尽管它是可配置的). 您可以在PHP网站中使用打开和管理此文件。有关Apache日志文件的更多信息,请参阅。您可以从获取有关.htaccess的教程


要进行自己的处理,请创建一个类似error.PHP的PHP文件,该文件将处理您的错误。您可以使用.htaccess文件重定向它。之后,如果您想转到某个页面,可以使用方法进行操作。

您想处理什么?调用方页面信息的用途是什么?它是错误页面,但是,当您在前面包含http时,Apache会重定向到该页面,而不是停留在发生错误的URL上,因此没有关于错误的数据。不过,我不想在事后检测它,我希望PHP在那里检测它,并对其进行我自己的处理。