Apache:重定向 404 和 ErrorDocument 404 区别

Apache:重定向 404 和 ErrorDocument 404 区别

我想使用 Apache 进行 404 重定向,并且找到了几种解决方案:

  1. .htaccess 方法。但如果没有必要,我不想添加 .htaccess。

  2. 虚拟主机方法:

<VirtualHost *:80>
    ServerAlias *.example.com
    Redirect 404 /index.html
    ErrorDocument 404 /index.html
</VirtualHost>

我想知道重定向 404 和 ErrorDocument 404 有什么区别?

答案1

您是否使用Redirect指令进行测试?

Redirect 404 /index.html意味着当客户端请求时将返回404响应/index.html(即使它可能存在)。

ErrorDocument 404 /index.html意思是当客户端访问一个不存在的URL时,Apache会重定向到index.html页面。

ErrorDocument在这种情况下您必须使用。

答案2

这两者通常无关。当我尝试设置具有 404 状态的重定向时,Redirect URL not valid for this status尝试启动 apache 时收到错误消息。

A重定向将客户端发送到新地址,并为客户端提供状态。返回的状态通常是30倍值。

錯誤文檔指令将 apache 配置为在发生 nnn 类型的错误时返回特定页面(而不是默认页面)。在您的示例中,您说的是当发生 404(未找到)错误时返回 /index.html。

你想实现什么?

答案3

如果您ErrorDocument正确配置了该指令,您所要做的就是确保该文件实际上不存在。如果您尝试匹配文件名模式,则需要匹配该模式并将请求重写为不存在的响应。并确保关闭目录浏览:

<VirtualHost *:80>
 Options -Indexes
 ErrorDocument 404 /not-found.htm
 AliasMatch /index\.* /something/not/here
</VirtualHost>

答案4

这是 3 种不同的事情:

  1. 在哪里配置你的指令:

    • 在 Apache 配置中(例如 vhost 文件,通常位于 /etc/apache2/sites-available 中)
    • 或者在 Web 根目录某处的 .htaccess 中。

    大多数指令,您都可以放在任一文件中。.htaccess 中的指令始终适用于当前目录。您可以将它们放在 Web 根目录或子目录中。Apache 配置中的更改需要重新加载 Web 服务器(这是一件好事,因为它也会进行一些检查)。出于性能原因,通常建议完全不使用 .htaccess(如果没有必要)。

  2. 在定义指令的上下文中,如果<VirtualHost *:80>它在虚拟主机上下文中(意味着它适用于此虚拟主机)。您还可以使用目录上下文,这意味着它仅适用于特定目录。这在 Apache 2.4 中得到了很好的解释“配置部分”docs. .htaccess 适用于特定目录(如果将其放在顶层,则适用于全部目录)。

  3. 如何配置,这意味着哪些指令。ErrorDocument 和 Redirect 的作用不同:

    • 錯誤文檔定义在出现错误时应显示的内容,使用 404 表示未找到页面。您上面发布的指令意味着 index.html 将用作错误页面。您通常不希望这样。您通常希望显示特定的错误页面,例如ErrorDocument 404 error.html。这是推荐的方法:它将返回 HTTP 状态代码 404(这很好,因为它会导致搜索引擎从索引中删除页面)并在浏览器中显示 error.html。
    • 重定向您上面发布的语句将获得 404 HTTP 状态代码,但不会显示您指定的页面,因此请使用 ErrorDocument。

相关内容