自定义404页面-PHP

| 我有一个自定义的404页面,除了我要在此页面上显示的消息外,该页面都工作正常。 我想说的是找不到页面的URL,而是显示404页面的URL。 这就是我所拥有的...
You were looking for <?php echo $_SERVER[\'REQUEST_URI\'] ?>.
htaccess文件包含以下行:
ErrorDocument 404 /404/
    
已邀请:
您需要改用
$_SERVER[\'HTTP_REFERER\']
-这将是他们首先要求的地址。 这仅在问题中描述的确切情况下有效-浏览器实际上已重定向到404页面。在这种情况下,“ 3”包含404页的URI,而不是如上所述的最初请求的页。 在站点配置中使用Apache的
ErrorDocument 404 /handle404.php
.htaccess
意味着
$_SERVER[\'REQUEST_URI\']
实际上可以工作,但是在下面的更新中,更健壮的解决方案是该选项。 更新: 显然,
$_SERVER[\'REDIRECT_URL\']
可能是更好的选择,但经过了一些搜索。 正如下面的评论者所述,对于这两种情况,请记住,任何标头都像
$_POST
$_GET
和其他标头一样容易受到恶意内容的侵害,因此请在输出任何内容之前对其进行处理。 更新2: 没有在下面看到@Janoz的帖子-他正确提到了
REDIRECT_URL
。     
从php页面的角度来看,这确实是请求uri。显示错误页面是由Web服务器完成的。例如,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检查您的用户正在寻找的文件是否存在。如果不将其重定向到自定义错误页面。     

要回复问题请先登录注册