我一直在网上搜索检索生成 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 作为错误的链接本身?
在我网站的根文件夹中,我有 .htaccess 文件,其中包含以下指令:
ErrorDocument 404 error404.php
在 error404.php 里面,我遍历整个 $ _ SERVER 变量,这就是我得到的:
此外,在两种情况下 $ _ 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作为罪魁祸首)。
答案 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”