【问题标题】:Get page referer and missing page that generates Error 404 using PHP获取使用 PHP 生成错误 404 的页面引用和丢失页面
【发布时间】:2014-09-15 07:45:38
【问题描述】:

我一直在网上研究一种方法来检索产生 404 错误URL。我在这个网站和其他网站上找到了关于这个主题的各种帖子,并尝试了所有这些。不幸的是,我仍然无法得到我想要的东西。我将尝试解释我所做的和得到的。

场景:

我有一个页面。让我们致电 http://www.example.com/index.php

在此页面中,我有一个链接,可以说是 wrong_page.php,或者,如果您愿意,可以说是 http://www.example.com/index.php

由于页面wrong_page.php并不真正存在,当有人点击此链接时,它会重定向到error404.php。 (为方便起见,所有页面都在根目录下。

问题error404.php 是否可以将 index.php 作为错误链接所在的原始页面和wrong_page.php 本身是错误的链接?

设置

在我网站的根文件夹中,我有 .htaccess 文件,其中包含以下指令:

ErrorDocument 404 error404.php

error404.php 内部,我遍历整个 $_SERVER 变量,这就是我得到的:

  1. 如果访问者点击 wrong_link(导致 wrong_page.php 的链接), 我得到 $_SERVER['HTTP_REFERER'] = 'index.php' 但没有引用 wrong_page.php;
  2. 如果访问者在地址栏中键入 wrong_page.php$_SERVER['HTTP_REFERER'] 甚至不存在(使用 isset() 测试 函数)。

此外,在这两种情况下 $_SERVER['REQUEST_URI'] = 'error404.php'

我尝试了其他帖子中提到的所有以 "REDIRECT" 开头的 $SERVER 全局变量,但它们不存在(也经过测试isset() 函数)。

另外,我在两个不同的服务器上进行了尝试:我自己的 WAMP 实例(我用于开发)和一个运行 apache 的生产服务器。

在我的电脑中,当我查看服务器错误日志 (apache_error.log) 时,我发现这样一行:

[Wed Jul 23 11:28:51 2014] [error] [client 127.0.0.1] File does not exist: /www.example.com  referer: /www.example.com/index.php

在生产服务器中,当我重现相同的错误时,不会创建同一行。

我错过了什么?或者这就是我能得到的全部? 我可以更改任何服务器参数以获得我想要的吗? 我应该看看另一个全局变量吗? 正如我所说,我知道还有很多关于此的其他帖子,但它们都在谈论这些相同的全局变量,而且正如我所说,它们没有给我想要的东西(错误的 page.php 是罪魁祸首)。

【问题讨论】:

  • 您缺少的是对 http 是无状态协议的理解。
  • 感谢您的评论以及 http 是无状态协议这一事实。尽管如此,我的问题仍然存在:是否有可能检索到错误的链接 (wrong_page.php),如果是这样,您知道如何或可以引导正确的方向吗?

标签: php apache .htaccess http-status-code-404 superglobals


【解决方案1】:

如果我可以称之为解决方案,我终于找到了“解决方案”。

整个问题出在 .htaccess 中的指令中使用的 URL。

我把我的指令写成:

ErrorDocument 404 error404.php

但在我实际的 .htaccess 中,我将指令设置为

ErrorDocument 404 http://www.example.com/error404.php

http://www.example.com 的存在是问题所在。我所要做的就是使指令如下:

ErrorDocument 404 /error404.php

这样,$_SERVER['REQUEST_URI'] 给了我用户请求的错误 URI。如果它是我网站中的链接,它会在 $_SERVER['HTTP_REFERER'] 中为我提供链接所在的页面。否则,如果用户只是在地址栏中输入了错误的 URI,$_SERVER['HTTP_REFERER'] 将为空白。

我希望这可以帮助其他有同样问题的人。

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 2012-07-26
    • 2011-11-24
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2013-06-06
    相关资源
    最近更新 更多