如何從 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 維基

答案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 狀態。

相關內容