Apacheから404ではなく410を返す方法

Apacheから404ではなく410を返す方法

当社のサイトでは、コンテンツの有効期限が切れたページを頻繁に削除する傾向があり、サーバー上に存在しないページ (物理ファイル) へのリクエストに対しては、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 ステータスを適切に返すこともできます。

関連情報