[英]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
和其他标题一样容易出现恶意内容,因此在输出任何内容之前处理它们。
没看到@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.