获取页面引用和缺少使用PHP生成错误404的页面

时间:2014-07-23 22:27:27

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

我一直在网上搜索检索生成 404错误网址的方法。我在这个和其他网站上找到了关于这个主题的各种帖子,并尝试了所有这些。不幸的是,我仍然无法得到我想要的东西。我会试着解释一下我做了什么以及我得到了什么。

情景:

我有一个页面。我们打电话给 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 作为错误的链接本身?

SETUP

在我网站的根文件夹中,我有 .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()进行测试功能)。
  3. 此外,在两种情况下 $ _ SERVER ['REQUEST_URI'] ='error404.php'

    我尝试了所有 $ SERVER 全局变量,以“REDIRECT 开头如其他帖子中所述,但它们不存在(也使用 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
    

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

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

2 个答案:

答案 0 :(得分:3)

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

整个问题出现在 .htaccess 内的指令中使用的网址。

我写了我的指令:

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'] 将为空。

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

答案 1 :(得分:0)

$_SERVER['REQUEST_URI'] 适用于“ErrorDocument 404 /error404.php”