5

標準の LAMP アプリケーションでは、次のように .htaccess ルールを使用して 404 ページに人々を送信しています。

ErrorDocument 404 http://www.mydomain.com/404.php

ファイルシステムからファイルを読み取るphpファイルを使用して動的画像を提供していますが、画像がアプリから削除されたときにこれを取得していないことに気付きました.http://www.mydomain. mod_rewrite を使用して image.php を呼び出すcom/image_4.jg (たとえば) は、動的な画像ファイルが常に存在するため、ユーザーを 404 ページにリダイレクトしません。この場合、404 を使用する必要があることはわかっていますが、どこにあるのかわかりません。

明らかに、画像が削除されたときにヘッダーリダイレクトを 404.php ページに手動で挿入する必要があることはわかっていますが、実際にこのリダイレクトで 404 ヘッダーを送信する必要がありますか?. 私たちの 404.php ページのコードを見ると、実際にはすでに 404 ヘッダーが送信されてい("HTTP/1.1 404 Not Found");ます。これは、SEO チームが数年前に指示したものです。これが正しいかどうかはわかりません。404ページ自体が見つからなかったことをほとんど暗示しているので、直感に反しているように思えます.

私はこれが2つの質問だと思います:

  • 画像が見つからない場合、リダイレクト内で 404 ヘッダーを送信する必要がありますか?
  • 404 ページは実際に 404 ヘッダーを送信する必要がありますか?

編集

404 の送信とリダイレクトを同時に行うことは実際には不可能のようです。たとえば、これにより Chrome に「おっと! このリンクは壊れているようです.」というメッセージが表示されます。メッセージ

header( "Location: /404.php", true, 404 );

このようにヘッダーを分割すると、意図したとおりに機能しません

header("HTTP/1.1 404 Not Found");
header("Location: /404.php" );

この場合、ヘッダーを見ると、302 に続いて 404 が送信されます。この場合、リダイレクトなしでヘッダーを送信するだけで十分でしょうか? 一部の人が推奨するように、単に410を送信するだけですか?

4

6 に答える 6

3

404お探しのページが見つかりませんでした

サーバーは、Request-URIに一致するものを検出しませんでした。状態が一時的であるか永続的であるかは示されません。410(Gone)ステータスコードは、サーバーが内部的に構成可能なメカニズムを通じて、古いリソースが永続的に利用できず、転送アドレスがないことを知っている場合に使用する必要があります。このステータスコードは、サーバーが要求が拒否された理由を正確に明らかにしたくない場合、または他の応答が適用できない場合に一般的に使用されます。

ステータスコードの定義

リソースが見つからない場合は、404応答をクライアントに返送する必要があります。

画像が見つからない場合、リダイレクト内で404ヘッダーを送信する必要がありますか?

はい。これは、動的イメージを要求しているクライアントに、リソースが見つからなかったことを通知します。リソースが戻らないことがわかっている場合は、代わりに410(Gone)を使用してください。

私の404ページは実際に404ヘッダーを送信する必要がありますか?

はい。SEOの404エラーページとリダイレクトを参照してください

アップデート

header("HTTP/1.0 404 Not Found");十分なはずです。ただし、コンテンツの長さが512バイト未満の場合、GoogleChromeはカスタム404ページを表示できません。

于 2011-10-16T13:07:01.587 に答える
2

簡単に言うと、両方の質問に対してそうです。

image.phpから送信された404ヘッダーは、.htaccessで指定された404エラードキュメントにリダイレクトされないため、画像が見つからない場合は常に手動で404.phpにリダイレクトする必要があります。推奨される方法は410(Gone)です。特に、要求されたリソースが削除されて戻ってこないことがわかっているため、検索エンジンはリンクを削除できます。

2番目のはいについて:Apacheはすでにあなたのためにそれをしますが、そうすべきです。

于 2011-10-16T13:07:09.280 に答える
2

ディレクティブを使用して定義されたエラー ドキュメントErrorDocumentは、要求を既存のファイルにマップできないことを Web サーバーが認識した場合にのみ提供されます。しかし、 mod_rewrite を使用してそれらを既存のimage.phpにマップしているため、それらは明らかに見つかります。したがって、Web サーバーの観点からは、最初の要求を満たすことができます。

この時点で、特定のリクエストを実行できず、後で 404 になるかどうかは問題ではありません。その場合、image.phpは適切なエラー応答で応答する必要があります。

画像が見つからない場合、リダイレクト内で 404 ヘッダーを送信する必要がありますか?

送信できる応答ステータス コードは 1 つだけです。したがって、エラー応答 (4xx) またはリダイレクト応答 (3xx) を送信できます。あなたの場合、ドキュメント URL として絶対 URL を使用すると、オリジン 404 の代わりにリダイレクト ステータス コード (つまり 302) が生成されます。

404 ページは実際に 404 ヘッダーを送信する必要がありますか?

はい、もちろん。それがステータスコードの目的です。

また、そのエラー ドキュメントに関する役立つ情報も提供してください。無意味なエラー文書ほど悪いものはありません。

于 2011-10-16T13:31:33.237 に答える
2
header("HTTP/1.0 404 Not Found");

404 ページを含めることもできます。ヘッダーのみを送信すると、空白のページが表示されます。

header("HTTP/1.0 404 Not Found");
include_once("404.html");
exit();
于 2013-07-30T06:44:43.073 に答える
1
  1. リダイレクトするかどうかはわかりません。404.phpを含めたいと思います。
  2. それは正しいです。デフォルトのエラーページも存在し、404を送信します。
于 2011-10-16T13:08:29.560 に答える
0
header("HTTP/1.1 404 Not Found");
header("Refresh: 0; url=/404.php");
于 2014-08-07T20:01:58.707 に答える