
在我們的網站上,我們傾向於刪除大量內容已過期的頁面,並且對於對我們伺服器上不存在的頁面(實體文件)的請求,我們希望返回 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 狀態。