【问题标题】:Custom 404 shows "File not found" for php files instead of redirecting自定义 404 显示 php 文件的“找不到文件”而不是重定向
【发布时间】:2018-10-17 20:46:14
【问题描述】:

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

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

但是,当我尝试访问扩展名为 .php 且不存在的文件时,我得到以下信息:

...成为屏幕上的“File not found.”,而不是被重定向到我的 404 文档。

我的 .htaccess

RewriteEngine On
ErrorDocument 404 /404.php

我的 404.php

<?php

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

?>

我的 404.html

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

Custom 404!

</body>
</html>

编辑

为了更清楚地了解这里发生了什么。

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

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

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

【问题讨论】:

  • 它说“ErrorDocument 404 /404.php”但是404页面是一个HTML文件?出了点问题。为什么不:ErrorDocument 404 /404
  • @user770 这到底有什么不对?他将错误页面重定向到 404.php 并且 php 文件包含 404.html。我同意这是一种奇怪的方法,但我不会说它在技术上是错误的。
  • 你说“对所有不存在的文档都很好” - 但是“当我尝试打开不存在的php文件时” - 我糊涂了。您要打开哪个 php 文件?另外,您确定路径正确吗?您可能需要使用完整的服务器地址。这是在本地运行还是托管?
  • 对!他错过了这个:include ($_SERVER['DOCUMENT_ROOT']."full/path/to/404.html");
  • @user770 只有 OP 得到通知,并且所有 cmets,无论是否 ping 通。当其他成员互相评论时,则需要直接 ping。

标签: php apache .htaccess http-status-code-404 vps


【解决方案1】:

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

ProxyErrorOverride on

【讨论】:

    【解决方案2】:

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

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

    ProxyErrorOverride On
    

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      相关资源
      最近更新 更多