web-dev-qa-db-ja.com

Apache:リダイレクト404とErrorDocument 404の違い

Apacheで404リダイレクトを実行したいのですが、いくつかの解決策があります。

  1. .htaccessメソッド。しかし、必要がない場合は.htaccessを追加したくありません。

  2. 仮想ホスト方式:

<VirtualHost *:80>
    ServerAlias *.example.com
    Redirect 404 /index.html
    ErrorDocument 404 /index.html
</VirtualHost>

Redirect 404とErrorDocument 404の違いは何ですか?

5
DocWiki

Redirectディレクティブでテストしましたか?

Redirect 404 /index.htmlは、クライアントがリクエストしたときに404応答が返されることを意味します/index.html(存在する可能性がある場合でも)。

ErrorDocument 404 /index.htmlは、クライアントが存在しないURLにアクセスすると、Apacheがindex.htmlページにリダイレクトすることを意味します。

この場合、ErrorDocumentを使用する必要があります。

10
quanta

2つは一般に無関係です。 404ステータスでリダイレクトを設定しようとしたところ、エラーメッセージRedirect URL not valid for this status Apacheを起動しようとしたとき。

リダイレクト は、クライアントを新しいアドレスに送信し、クライアントのステータスを提供します。返されるステータスは通常 x 値です。

ErrorDocument ディレクティブは、タイプnnnのエラーが発生したときに(デフォルトのページではなく)特定のページを返すようにApacheを設定します。あなたの例では、404(見つかりません)エラーが発生したときに/index.htmlを返すと言っています。

何を達成しようとしていますか?

2
user9517

これらは3つの異なるものです。

  1. どこでディレクティブを設定する:

    • apache設定(例:vhostファイル、通常/ etc/Apache2/sites-available内)
    • または、Webルートのどこかにある.htaccessにあります。

    ほとんどのディレクティブは、どちらのファイルにも入れることができます。 .htaccessのディレクティブは常に現在のディレクトリに適用されます。これらは、Webルートまたはサブディレクトリに配置できます。 Apacheの設定を変更すると、ウェブサーバーの再読み込みが必要になります(これは、いくつかのチェックも行うので良いことです)。パフォーマンス上の理由から、(必要がない場合は)通常、.htaccessを使用しないことをお勧めします。

  2. ディレクティブを定義するコンテキストでは、<VirtualHost *:80>仮想ホストコンテキストにあります(つまり、この仮想ホストに適用されます)。ディレクトリコンテキストを使用することもできます。つまり、特定のディレクトリにのみ適用されます。これは、Apache 2.4 "Configuration Sections" docsで十分に説明されています。 .htaccessは特定のディレクトリ(または、最上位に配置する場合はすべて)に適用されます。

  3. 構成方法、つまりどのディレクティブ。 ErrorDocumentとRedirectは異なることをします:

    • ErrorDocument は、エラーが発生した場合に何を表示するかを定義します。ページが見つからない場合は404を使用します。上記のディレクティブは、index.htmlがエラーページとして使用されることを意味します。あなたは通常それを望んでいない。通常、特定のエラーページを表示する必要があります。 ErrorDocument 404 error.html。これは推奨される方法です。HTTPステータスコード404を返し(検索エンジンがインデックスからページを削除するため、これは適切です)、ブラウザにerror.htmlを表示します。
    • 上記で投稿した Redirect ステートメントは404 HTTPステータスコードを取得しますが、指定したページを表示しないため、ErrorDocumentを使用します。
0
Sybille Peters

ErrorDocumentディレクティブを正しく設定すると、ファイルが実際に存在しないことを確認するだけで済みます。ファイル名のパターンを照合する場合は、パターンを照合し、存在しない応答にリクエストを書き直す必要があります。また、ディレクトリの参照をオフにしてください。

<VirtualHost *:80>
 Options -Indexes
 ErrorDocument 404 /not-found.htm
 AliasMatch /index\.* /something/not/here
</VirtualHost>
0
memnoch_proxy