如何从 Apache 提供 410 而不是 404

如何从 Apache 提供 410 而不是 404

在我们的网站上,我们倾向于删除大量内容已过期的页面,并且我们希望对服务器上不存在的页面(物理文件)的请求返回 http 状态 410 而不是 404(整个网站由静态文件组成)。

我们已尝试

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ - [G,L]

这篇博文但这会破坏我们整个网站,每个请求都会返回 410。

我们正在使用 Apache 2.2.3

答案1

    Redirect gone /path/to/resource

是正确的做法。如果这导致错误,请确保您已mod_alias在服务器中加载。

答案2

我认为克里斯的回答非常好。如果你不想使用 PHP 脚本,它可以变成:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$                - [G,L]

不要忘记mod_rewrite页面还有一个同伴mod_rewrite 维基

答案3

创建一个errorpage.php(或任何脚本语言)并让该文件返回一个http状态标头:410 Gone,然后将以下内容添加到您的apache配置中,该配置基本上表示如果请求的url不是文件也不是目录(即文件不存在),则加载errorpage.php文档。

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /errorpage.php [L]

errorpage.php 可能很简单,例如:

<?php header($_SERVER['SERVER_PROTOCOL'].' 410 Gone');

您还可以让 errorpage.php 包含已删除页面的列表(或其他跟踪方式),以便它可以根据资源是否先前存在正确返回 404 或 410 http 状态。

相关内容