我有一个自定义 404 页面,除了我想在此页面上显示的消息外,它工作正常。
我希望它说出无法找到的页面的 url,而是显示 404 页面的 url。
这就是我所拥有的...
You were looking for <?php echo $_SERVER['REQUEST_URI'] ?>.
htaccess 文件包含以下行:ErrorDocument 404 /404/
我有一个自定义 404 页面,除了我想在此页面上显示的消息外,它工作正常。
我希望它说出无法找到的页面的 url,而是显示 404 页面的 url。
这就是我所拥有的...
You were looking for <?php echo $_SERVER['REQUEST_URI'] ?>.
htaccess 文件包含以下行:ErrorDocument 404 /404/
您需要改为使用$_SERVER['HTTP_REFERER']
- 这将是他们首先请求的地址。
这仅适用于问题中描述的确切情况 - 浏览器实际上已被重定向到404 页面。在这种情况下,$_SERVER['REQUEST_URI']
包含 404 页面的 URI,而不是描述的最初请求的页面。
ErrorDocument 404 /handle404.php
在站点配置中使用 Apache或者.htaccess
意味着这$_SERVER['REQUEST_URI']
实际上可以工作,但更强大的解决方案是下面更新中的选项。
$_SERVER['REDIRECT_URL']
然而,经过一番搜索,显然可能是一个更好的选择。
$_POST
正如下面评论者所提到的,对于这两种情况,请记住,任何标头都与,和其他标头一样容易出现恶意内容$_GET
,因此请在输出任何内容之前对其进行处理。
没有看到下面@Janoz 的帖子 - 他正确地提到了REDIRECT_URL
.
从 php 页面的角度来看,这确实是请求 uri。显示错误页面由网络服务器完成。例如 Apache 将添加一些额外的服务器变量。REDIRECT_URL 可能是您正在寻找的那个。
我没有写这个函数,但它是我用来做同样事情的:
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()); ?>
使用 file_exists 检查您的用户正在查找的文件是否存在。如果它没有将它们重定向到自定义错误页面。
如果页面不存在,您将他重定向到 404 页面?理想情况下,我会直接在未找到的页面上显示 404。这样,您不必重定向,并且可以正确使用 REQUEST_URI。而且您的 404 代码仍然可以集中!