自定义 404 为 php 文件显示“找不到文件”而不是重定向

Bik*_*ohn 9 php apache .htaccess vps http-status-code-404

我正在尝试创建自定义 404 错误页面。

到目前为止,我对所有不存在的文档、文件夹、图像、html 等都非常有效 - 打开我的自定义 404 页面(输出自定义 404!

但是,当我尝试访问.php扩展名不存在的文件时,我得到了这个:

404响应

...在屏幕上显示“找不到文件”,而不是被重定向到我的 404 文档。

我的.htaccess

RewriteEngine On
ErrorDocument 404 /404.php
Run Code Online (Sandbox Code Playgroud)

我的 404.php

<?php

header("HTTP/1.0 404 Not Found");
include '404.html';
die();

?>
Run Code Online (Sandbox Code Playgroud)

我的 404.html

<!DOCTYPE html>
<html>
<head>
<title>Custom 404 | Not found!</title>
</head>
<body>

Custom 404!

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

编辑

更清楚地了解这里发生的事情。

我相信路径和 .htaccess 工作得很好,但是 php 必须有一些技巧。以下是几个例子:

当我尝试打开服务器上不存在的一些文件时:

  • myurl.com/folderthatdoesntexist/ -> 打开正确的 404 / 响应自定义 404!
  • myurl.com/imagethatdoesntexist.jpg -> 打开正确的 404 / 响应自定义 404!
  • myurl.com/htmlthatdoesntexist.html -> 打开正确的 404 / 响应自定义 404!
  • myurl.com/phpthatdoesntexist.php -> 没有打开正确的 404 -> 说 找不到文件

小智 6

我怀疑不同之处在于 php 文件启动解释器,而 html 文件只提供服务。一种可行但可能不是唯一或最好的解决方案是将此指令添加到主机配置文件中:

ProxyErrorOverride on
Run Code Online (Sandbox Code Playgroud)


Exa*_*son 6

发生这种情况是因为您可能已启用 mod_proxy_fcgi 并且正在使用 PHP-FPM。代理中的默认错误页面是File not found。因此,将以下内容添加到您的 httpd.conf 或 apache2.conf,而不是您的 .htaccess。

它使您的 .htaccess 文件的ErrorDocument指令覆盖默认的代理错误页面。

ProxyErrorOverride On
Run Code Online (Sandbox Code Playgroud)

谢谢。