web-dev-qa-db-ja.com

エラーページURLにリダイレクトする代わりに、Apacheに欠落しているページURLに404を表示させる

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
6
Explisam

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に変更するには、編集する必要があります。

4

これには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

1
marcanuy