繁体   English   中英

自定义404页面 - PHP

[英]Custom 404 page - PHP

我有一个自定义404页面工作正常,除了我想在此页面上显示的消息。

我想说它找不到页面的网址,而是显示404页面的网址。

这是我的...

You were looking for <?php echo $_SERVER['REQUEST_URI'] ?>.

htaccess文件包含以下行: ErrorDocument 404 /404/

您需要使用$_SERVER['HTTP_REFERER'] - 这将是他们首先请求的地址。

这仅适用于问题中描述的确切情况 - 浏览器实际上已重定向到 404页面。 在这种情况下, $_SERVER['REQUEST_URI']包含404页面的URI,而不是所描述的最初请求的页面。

在站点配置或.htaccess使用Apache的ErrorDocument 404 /handle404.php意味着$_SERVER['REQUEST_URI']实际上会起作用,但更强大的解决方案是下面更新中的选项。

更新:

显然$_SERVER['REDIRECT_URL']可能是一个更好的选择,但是,搜索了一下。

对于这两种情况,如下面的评论者所提到的,请记住,任何标题都像$_POST$_GET和其他标题一样容易出现恶意内容,因此在输出任何内容之前处理它们。

更新2:

没看到@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()); ?>

如果页面不存在,您将其重定向到404页面? 理想情况下,我会直接在未找到的页面上显示404。 这样,您不必重定向,并且可以正确使用REQUEST_URI。 您的404代码仍然可以集中!

使用file_exists检查用户正在查找的文件是否存在。 如果没有,则将它们重定向到自定义错误页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM