non-existent-page.html
が存在せず、ユーザーがそのページにアクセスしようとして404エラーが発生したと仮定します。
要求されたページのURLを表示できますか:
http://www.example.com/non-existent-page.html
エラーページURLの代わりに:
http://www.example.com/404.html
解決策:
Stephen Ostermiller
の答えを見ながら、相対URLを使用していることは知っていましたが、ページではなくディレクトリを指していたため、末尾に末尾のスラッシュがないことに気付きました。これは、構成が不適切なxSPで主に発生します。
問題
ErrorDocument 404 /error/404 <-- no slash
修正する
ErrorDocument 404 /error/404/ <-- added slash
Apacheサーバーは、エラーURLでエラーページを表示するように構成することも、エラーページにリダイレクトすることもできます。エラーページをリダイレクトするのではなく、URLで直接表示する方がほぼ良いでしょう。
Apache ErrorDocument
ディレクティブ は、両方の方法で実装する方法を説明しています。
URLは、ローカルWebパスのスラッシュ(/)(DocumentRootを基準とする)で始まるか、クライアントが解決できる完全なURLにすることができます。
実際には、エラードキュメントを絶対URLとして指定すると、エラーページへのリダイレクトが発生します。
ErrorDocument 404 http://www.example.com/404.html
ただし、スラッシュで始まる相対URLとしてエラードキュメントを指定すると、エラーが発生した元のURLにエラードキュメントが表示されます。
ErrorDocument 404 /404.html
私の推測では、ErrorDocument
ディレクティブは。htaccessファイルまたはhttpdのいずれかで絶対URLとして設定されています.confファイル。相対URLに変更するには、編集する必要があります。
これにはRewriteEngineを使用し、HTTPリクエストがhtml拡張子で終了しているかどうかを検出する条件/ルールを追加してから、同じものにリダイレクトする必要があります.htaccess
内のURLなし:
RewriteEngine On
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.html\ HTTP
RewriteRule (.*)\.html$ $1 [R=301]
これは、.html
バージョンで終わる各リクエストを、拡張子のない同じURLにリダイレクトします。不正なURLにアクセスするときなど、非。htmlバージョンが存在する場合、404ページが表示されます。
RewriteRuleディレクティブをご覧ください here