在 PHP 中发送 404 标头后从 htaccess 显示 404 文档

Mic*_*uel 1 html php .htaccess mod-rewrite redirect

在 PHP 中,我使用以下代码来指示未找到页面:

header("HTTP/1.0 404 Not Found");exit();
Run Code Online (Sandbox Code Playgroud)

.htaccess文件中,我有以下行来处理 404 自定义文档:

ErrorDocument 404 /404.html
Run Code Online (Sandbox Code Playgroud)

现在,当我发送 PHP 404 标头时,我希望它显示404.html其中定义的自定义内容.htaccess,但它显示一条消息“此链接似乎已损坏”。因此,它不会显示自定义 404 页面,如果我从中删除该行,.htaccess仍然不会显示服务器的常规 404 页面,并且还会显示损坏的链接消息。

那么如何让PHP发送header时显示404页面呢?

Jon*_*Lin 5

这里的问题是,ErrorDocument除非 URL 处理管道找不到 URL 指向的文件(或处理程序),否则不会处理由 表示的自定义错误文档。在您的情况下,处理管道确实找到了一个文件,即您的 php 文件,因此它本身永远不会到达 404,因此ErrorDocument永远不会应用。

当 apache 使用 php 处理程序运行您的 php 文件,并且您的php 文件决定返回 404 时,您不仅需要提供 404 响应代码,还需要提供 HTML 错误文档。您看不到默认的 apache 错误文档,因为 apache 从不认为该请求是 404(它将请求交给您的 php 文件)。所以你需要做这样的事情:

header("HTTP/1.0 404 Not Found");
include('404.html');
exit();
Run Code Online (Sandbox Code Playgroud)