Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取使用PHP生成错误404的页面引用器和缺少的页面_Php_Apache_.htaccess_Http Status Code 404_Superglobals - Fatal编程技术网

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

获取使用PHP生成错误404的页面引用器和缺少的页面,php,apache,.htaccess,http-status-code-404,superglobals,Php,Apache,.htaccess,Http Status Code 404,Superglobals,我一直在网上寻找一种方法来检索产生404错误的URL。我在这个网站和其他网站上找到了关于这个主题的各种帖子,并且都试过了。不幸的是,我仍然无法得到我想要的。我会尽力解释我做了什么,得到了什么 场景: 我有一页。让我们打电话给 在这个页面中,我有一个链接,比如说错了\u page.php,或者,如果您愿意, 由于页面错误\u page.php实际上并不存在,当有人单击此链接时,它会重定向到error404.php。(为了方便起见,所有页面都位于根目录中 问题:有没有可能error404.php将i

我一直在网上寻找一种方法来检索产生404错误的URL。我在这个网站和其他网站上找到了关于这个主题的各种帖子,并且都试过了。不幸的是,我仍然无法得到我想要的。我会尽力解释我做了什么,得到了什么

场景: 我有一页。让我们打电话给

在这个页面中,我有一个链接,比如说错了\u page.php,或者,如果您愿意,

由于页面错误\u page.php实际上并不存在,当有人单击此链接时,它会重定向到error404.php。(为了方便起见,所有页面都位于根目录中

问题:有没有可能error404.phpindex.php作为错误链接所在的原始页面和错误页面.php作为错误链接本身

设置 在我的站点的根文件夹中,我有一个带有以下指令的.htaccess文件:

ErrorDocument 404 error404.php
error404.php中我循环了整个$\u服务器变量,这是我得到的:

  • 如果访问者点击了错误链接(导致错误页面.php的链接), 我得到了$\u服务器['HTTP\u REFERER']='index.php',但没有对错误页面的引用
  • 如果访问者在地址栏中键入错误的\u page.php$\u服务器['HTTP\u REFERER']甚至不存在(使用isset()函数测试)
  • 此外,在这两种情况下,$\u服务器['REQUEST\u 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
    
    在生产服务器中,当我复制相同的错误时,不会创建相同的行

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

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

    整个问题在于.htaccess内的指令中使用的URL

    我将我的指令写为:

    ErrorDocument 404 error404.php
    
    但是在我的实际.htaccess中,我的指令是

    ErrorDocument 404 http://www.example.com/error404.php
    
    的存在是问题所在。我所要做的就是按照以下方式发出指令:

    ErrorDocument 404 /error404.php
    
    这样,$\u服务器['REQUEST\u URI']会给我用户请求的错误URI。如果它是我网站中的链接,它会给我该链接存在于$\u服务器['HTTP\u REFERER']中的页面。否则,如果用户只是在地址栏中键入错误的URI,$\u服务器['HTTP\u REFERER']将为空


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

    您缺少的是对http是无状态协议的理解。我感谢您的评论以及http是无状态协议的事实。然而,我的问题仍然是:是否有可能检索错误的链接(错误的页面.php)如果是这样的话,你知道如何或能够指引正确的方向吗?