【发布时间】: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 变量,这就是我得到的:
- 如果访问者点击 wrong_link(导致 wrong_page.php 的链接), 我得到 $_SERVER['HTTP_REFERER'] = 'index.php' 但没有引用 wrong_page.php;
- 如果访问者在地址栏中键入 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