如何显示来自 PHP 的默认 Apache 404

How to display default Apache 404 from PHP

我环顾四周,没有发现任何关于我需要的问题。

我想制作类似 "admin.php" 的内容,但如果条件不合适,我想将其制作成 returns 404。但是,看起来与所有其他 404 页面不同的 404 将向攻击者暗示 "admin.php" 是一个真实文件。

我不想制作自己的自定义 404 页面,我认为 Apache 的默认 404 对我来说已经足够了。如何发送一个 404 来触发 apache 发送已经存在的 ErrorDocument。我假设此错误文档在搜索后位于(在 Ubuntu 中):“/usr/share/apache2/error/HTTP_NOT_FOUND.html.var”

当我使用像这样的东西时:

<?php
    http_response_code(404);
    die();
?>

在网络浏览器中看起来像这样:

当我请求一个真正不在网络服务器上的 URL 时,它看起来像这样:

我想知道如何使用 Apache 的默认 404 页面使“/admin.php”看起来像第二张图片。有没有办法在不使用 .htaccess 文件的情况下做到这一点,仅来自 PHP?如果没有,我只需要弄清楚如何弄乱 Apache 设置即可。

无法仅通过返回 404 来执行此操作,因为 Apache 会找到该文件,因此不会再抛出错误页面。您能做的最好的事情就是模拟 Apache 错误页面:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?> was not found on this server.</p>
</body></html>

完整示例php 嵌入(测试)如下:

if ( $_SESSION['login_user'] !== "admin" ) {

    echo("<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">");
    echo("<html><head>");
    echo("<title>404 Not Found</title>");
    echo("</head><body>");
    echo("<h1>Not Found</h1>");
    echo("<p>The requested URL ".htmlspecialchars($_SERVER['REQUEST_URI'])." was not found on this server.</p>"); 
    echo("<hr>");
    echo("<address>".apache_get_version()." Server at ".$_SERVER['SERVER_ADDR']." Port ".$_SERVER['SERVER_PORT']."</address>");
    echo("</body></html>");
    exit;
        }