Apacheで404リダイレクトを実行したいのですが、いくつかの解決策があります。
.htaccessメソッド。しかし、必要がない場合は.htaccessを追加したくありません。
仮想ホスト方式:
<VirtualHost *:80> ServerAlias *.example.com Redirect 404 /index.html ErrorDocument 404 /index.html </VirtualHost>
Redirect 404とErrorDocument 404の違いは何ですか?
Redirect
ディレクティブでテストしましたか?
Redirect 404 /index.html
は、クライアントがリクエストしたときに404応答が返されることを意味します/index.html
(存在する可能性がある場合でも)。
ErrorDocument 404 /index.html
は、クライアントが存在しないURLにアクセスすると、Apacheがindex.htmlページにリダイレクトすることを意味します。
この場合、ErrorDocument
を使用する必要があります。
2つは一般に無関係です。 404ステータスでリダイレクトを設定しようとしたところ、エラーメッセージRedirect URL not valid for this status
Apacheを起動しようとしたとき。
リダイレクト は、クライアントを新しいアドレスに送信し、クライアントのステータスを提供します。返されるステータスは通常 x 値です。
ErrorDocument ディレクティブは、タイプnnnのエラーが発生したときに(デフォルトのページではなく)特定のページを返すようにApacheを設定します。あなたの例では、404(見つかりません)エラーが発生したときに/index.htmlを返すと言っています。
何を達成しようとしていますか?
これらは3つの異なるものです。
どこでディレクティブを設定する:
ほとんどのディレクティブは、どちらのファイルにも入れることができます。 .htaccessのディレクティブは常に現在のディレクトリに適用されます。これらは、Webルートまたはサブディレクトリに配置できます。 Apacheの設定を変更すると、ウェブサーバーの再読み込みが必要になります(これは、いくつかのチェックも行うので良いことです)。パフォーマンス上の理由から、(必要がない場合は)通常、.htaccessを使用しないことをお勧めします。
ディレクティブを定義するコンテキストでは、<VirtualHost *:80>
仮想ホストコンテキストにあります(つまり、この仮想ホストに適用されます)。ディレクトリコンテキストを使用することもできます。つまり、特定のディレクトリにのみ適用されます。これは、Apache 2.4 "Configuration Sections" docsで十分に説明されています。 .htaccessは特定のディレクトリ(または、最上位に配置する場合はすべて)に適用されます。
構成方法、つまりどのディレクティブ。 ErrorDocumentとRedirectは異なることをします:
ErrorDocument 404 error.html
。これは推奨される方法です。HTTPステータスコード404を返し(検索エンジンがインデックスからページを削除するため、これは適切です)、ブラウザにerror.htmlを表示します。ErrorDocument
ディレクティブを正しく設定すると、ファイルが実際に存在しないことを確認するだけで済みます。ファイル名のパターンを照合する場合は、パターンを照合し、存在しない応答にリクエストを書き直す必要があります。また、ディレクトリの参照をオフにしてください。
<VirtualHost *:80>
Options -Indexes
ErrorDocument 404 /not-found.htm
AliasMatch /index\.* /something/not/here
</VirtualHost>