我有一个自定义的404页面,除了我要在此页面上显示的消息外,它的工作正常。
我希望它能说出无法找到的网页的网址,而是显示404网页的网址。
这就是我所拥有的......
You were looking for <?php echo $_SERVER['REQUEST_URI'] ?>.
htaccess文件包含以下行:ErrorDocument 404 /404/
答案 0 :(得分:12)
您需要使用$_SERVER['HTTP_REFERER']
代替 - 这将是他们首先请求的地址。
这仅适用于问题中描述的确切情况 - 浏览器实际上已经重定向到 404页面。在这种情况下,$_SERVER['REQUEST_URI']
包含404页面的URI,而不是所描述的最初请求的页面。
在网站配置中使用Apache的ErrorDocument 404 /handle404.php
或.htaccess
意味着$_SERVER['REQUEST_URI']
实际上会有效,但下面的更新中提供了更强大的解决方案。
显然$_SERVER['REDIRECT_URL']
可能是一个更好的选择,但搜索了一下。
对于这两种情况,正如下面的评论者所提到的,请记住,任何标题都与$_POST
,$_GET
和其他标题一样容易出现恶意内容,因此请在输出任何内容之前对其进行处理。< / p>
下面没有看到来自@Janoz的帖子 - 他正确地提到了REDIRECT_URL
。
答案 1 :(得分:7)
从php页面的角度来看,这真的是请求uri。显示错误页面由网络服务器完成。例如,Apache将添加一些额外的服务器变量。 REDIRECT_URL可能就是你要找的那个。
答案 2 :(得分:1)
我没有写这个函数,但是我用它来做同样的事情:
function selfURL() {
$s = empty($_SERVER["HTTPS"]) ? ''
: ($_SERVER["HTTPS"] == "on") ? "s"
: "";
$protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? ""
: (":".$_SERVER["SERVER_PORT"]);
return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
}
function strleft($s1, $s2) {
return substr($s1, 0, strpos($s1, $s2));
}
然后打印出来:
<?php print(selfURL()); ?>
答案 3 :(得分:0)
如果页面不存在,您将其重定向到404页面?理想情况下,我会直接在未找到的页面上显示404。这样,您不必重定向,并且可以正确使用REQUEST_URI。您的404代码仍然可以集中管理!
答案 4 :(得分:0)
使用file_exists检查您的用户正在查找的文件是否存在。如果没有,则将它们重定向到自定义错误页面。