【问题标题】:PHP 404 response headerPHP 404 响应标头
【发布时间】:2023-04-11 00:51:01
【问题描述】:

我使用 .htaccess RewriteRules 将 url 传递给 index.php。如果在数据库中找不到指定的页面名称,我希望我的脚本抛出正确的 404 响应。

我尝试实现的方法是:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");

在我的浏览器中分析 HTTP 响应,响应返回正常:

HTTP/1.1 404 Not Found 

但是,我希望能够输出一个友好的 404 页面,但是 header() 函数之后的任何内容都会被忽略,以及之前的任何内容......好吧......那太愚蠢了。

谁能建议如何从脚本中输出 404 错误消息?

谢谢。

【问题讨论】:

  • 为什么不在 header() 之后输出友好的错误页面,例如使用 echo?根据我的经验,这种方法是有效的。

标签: php http http-headers http-status-code-404 error-code


【解决方案1】:

您必须确保输出(或 ErrorDocument)大于 512 字节,以确保 Internet Explorer 不会显示它自己的错误页面。这可能就是您在标题未显示后遇到任何输出的原因。

【讨论】:

    【解决方案2】:
    <?php
    header("HTTP/1.0 404 Not Found");
        echo "<!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 " . $_SERVER['REQUEST_URI'] . " was not found on this server.</p>
    <hr>
    <address>Apache/2.2.3 (CentOS) Server at " . $_SERVER['SERVER_NAME'] . " Port 80</address>
    </body></html>";
        exit();
    ?>
    

    【讨论】:

      【解决方案3】:

      所以跟随(在.htaccess中)

      ErrorDocument 404 /errordoc.html
      

      不适合你?

      编辑:如您所见,您可以轻松地在 PHP 中抛出 404,然后在 .htaccess 中捕获它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-22
        • 2013-04-21
        • 2011-06-15
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 2011-08-20
        相关资源
        最近更新 更多