在PHP中发送404头后显示来自htaccess的404文档
在PHP中,我使用以下代码表示未找到页面:在PHP中发送404头后显示来自htaccess的404文档,php,html,.htaccess,mod-rewrite,redirect,Php,Html,.htaccess,Mod Rewrite,Redirect,在PHP中,我使用以下代码表示未找到页面: header("HTTP/1.0 404 Not Found");exit(); 在.htaccess文件中,我有以下行来处理404自定义文档: ErrorDocument 404 /404.html 现在,当我发送PHP404头文件时,我希望它会显示.htaccess中定义的自定义404.html,但它会显示一条消息“此链接似乎已断开”。因此,它不会显示自定义404页面,如果我从.htaccess中删除该行,它仍然不会显示服务器的常规404页面,
header("HTTP/1.0 404 Not Found");exit();
在.htaccess
文件中,我有以下行来处理404自定义文档:
ErrorDocument 404 /404.html
现在,当我发送PHP404头文件时,我希望它会显示.htaccess
中定义的自定义404.html
,但它会显示一条消息“此链接似乎已断开”。因此,它不会显示自定义404页面,如果我从.htaccess
中删除该行,它仍然不会显示服务器的常规404页面,并且还会显示断开的链接消息
那么,当我用PHP发送标题时,如何使其显示404页面呢?您只需向浏览器发送404代码,然后尝试重定向到错误404页面
header('location: http://youdomain.com/404.html'); exit;
您只需向浏览器发送404代码,然后尝试重定向到错误404页面
header('location: http://youdomain.com/404.html'); exit;
这里的问题是,除非URL处理管道找不到URL指向的文件(或处理程序),否则不会处理由
ErrorDocument
表示的自定义错误文档。在您的情况下,处理管道确实找到了一个文件,即您的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();
这里的问题是,除非URL处理管道找不到URL指向的文件(或处理程序),否则不会处理由
ErrorDocument
表示的自定义错误文档。在您的情况下,处理管道确实找到了一个文件,即您的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();
如果我想在不重定向的情况下输出错误文档呢?例如,不向用户显示存在一个php脚本。那么,如果我可以重定向到404???@MichaelSamuel,404头有什么用呢?404头返回一个HTTP响应代码,告诉另一端的任何东西请求URL“未找到”。您可以重定向到错误文档,但从该文档返回的代码将是200,这将错误地使另一端的任何人认为错误的URL实际上是好的,而不管响应中的内容如何。如果我希望在不重定向的情况下输出错误文档,该怎么办?例如,不向用户显示存在一个php脚本。那么,如果我可以重定向到404???@MichaelSamuel,404头有什么用呢?404头返回一个HTTP响应代码,告诉另一端的任何东西请求URL“未找到”。您可以重定向到错误文档,但是从该文档返回的代码将是200,这将错误地使另一端的任何人认为错误的URL实际上是一个好的URL,而不管响应中的内容如何。看起来ErrorDocument指令不起作用。试试
RewriteEngine On
ErrorDocument 404/404.html
。我的RewriteEngine已经上线了…谢谢:)RewriteEngine
(mod_rewrite)和ErrorDocument
(core)是不相关的。FWIW,听起来您好像看到了浏览器的默认404错误文档,当您不发送空的响应正文时,您可能会看到(取决于浏览器)。看起来ErrorDocument指令不起作用。试试RewriteEngine On
ErrorDocument 404/404.html
。我的RewriteEngine已经上线了…谢谢:)RewriteEngine
(mod_rewrite)和ErrorDocument
(core)是不相关的。FWIW,听起来您好像看到了浏览器的默认404错误文档,当您不发送空的响应正文时,您可能会看到(取决于浏览器)。就是这样!多年不知道该怎么做很高兴我在这里问了…非常感谢乔恩:是什么做的!好几年都不知道该怎么做很高兴我在这里问了…非常感谢Jon:D