
当社のサイトでは、コンテンツの有効期限が切れたページを頻繁に削除する傾向があり、サーバー上に存在しないページ (物理ファイル) へのリクエストに対しては、404 ではなく HTTP ステータス 410 を返すようにしたいと考えています (サイト全体が静的ファイルで構成されています)。
私たちは試しました
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 (または任意のスクリプト言語) を作成し、そのファイルが 410 Gone という http ステータス ヘッダーを返すようにし、次のコードを 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 ステータスを適切に返すこともできます。