Apache ErrorDocument が 301 ではなく 404 を返すようにできますか?

Apache ErrorDocument が 301 ではなく 404 を返すようにできますか?

私の中に.htaccess

ErrorDocument 404 http://foo.com/404.html

これは、ファイルが見つからないエラーから回復し、代わりに 404 ページを表示するという意味では機能しますが、その動作方法は、301 を使用してエラーのある URI を自分の404.htmlページにリダイレクトすることです。

これは、検索エンジンとクローラーが 404 コードではなく 301 コードを認識し、削除されたページをインデックスから削除しないため、問題となります。

ファイルが見つからないエラーが発生したときに Apache にこの 404 ページのコンテンツを表示させ、301 ではなく 404 コードを返すようにすることはできますか?

答え1

URLではなく絶対パスまたは相対パスを使用するようにしてください。

私の apache2.conf :

ErrorDocument 403 /error/403.html
ErrorDocument 404 /error/404.html
ErrorDocument 500 /error/500.html

答え2

外部URLを指定しないでください

Apacheのドキュメントにはこう書かれている:

構文は、

ErrorDocument <3-digit-code> <action>

行動を起こすことができる場所、

  • 表示するテキスト。テキストを引用符 (") で囲みます。
  • リダイレクト先の外部 URL。
  • リダイレクト先のローカル URL。

外部 URL を指定すると実際のリダイレクトが発生しますが、ローカル URL を使用すると内部リダイレクトになります。

したがって、ファイルの内容をレンダリングするには、単にそのファイルを指定するだけです。例:

ErrorDocument 404 /404.html

ジョブに適切なステータスコードを使用する

これは検索エンジンやクローラーが404コードではなく301コードを見ることになるので良くありません。削除されたページはインデックスから削除されません

ページが使用済み存在していたが今は存在しない場合、正しい応答コードは410 消えた410 は「そのページは存在しません」と伝えるコードですが、404 は、現在存在しないページへのアクセスを繰り返し試みた後にのみ、そのことを意味するものとして解釈されます。

答え3

Maxence と AD7six の回答に対するコメント (serverfaul で十分な評判を持っていません。また、Stack Exchange の評判は考慮されないようです):

この方法で問題を解決しましたが、URL がまだユーザーが呼び出そうとしていた URL であるため、含まれている画像とスタイルが失われました。

解決策は、404ドキュメントの先頭にベースタグを追加することです。

ErrorDocument 404

または、プロトコル/ドメイン名の有無にかかわらず絶対 URL を使用します。

関連情報