web-dev-qa-db-ja.com

.htaccessで子ページの404.htmlを表示する方法

エラーページexample.comを持つexample.com/404.htmlウェブサイトで作業しています。

これが私の.htaccessファイル全体です(Apache):

# Forces HTTPS

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301] 

# 404 redirect

ErrorDocument 404 /404.html

# Disables directory indexing (being able to view a list of files instead of the actual webpage)

Options -Indexes

相対404を使用しているため、ユーザーを実際にリダイレクトすることなく(したがってURLを変更することなく)404エラーページのコンテンツを表示します。これは、example.com/nonexistentpage.htmlのような上位レベルのページに最適です。

ただし、example.com/parent/nonexistentpage.htmlなどの子ページの処理方法がわかりません。

現在、既存の404.htmlページを複製し、すべてのURL参照で../で変更して正しい場所でリソースを検索し、新しい「子」404.htmlページを配置しました子ページがある私の「親」フォルダのそれぞれに。 example.com/parent/404.htmlにアクセスすると、エラーページにすべてのスタイルとリンクが正しく表示されます。ただし、example.com/parent/nonexistentpage.htmlにアクセスすると、URLは変わりませんが、カスタム404.htmlページの代わりに、スタイルが設定されていない一般的な404エラーメッセージが表示されます。

何かが足りませんか/何か間違っていますか目標は、実際のURLをリダイレクト/変更せずに、存在しない子ページにアクセスするときにエラーページのコンテンツを表示することです。 Options -Indexesもコメントアウトしましたが、効果はありませんでした。

どんな助け/提案をありがとう。

2
heyycap

何もする必要はないはずです。通常、エラーの原因となったURLに関係なく、同じErrorDocumentを提供します。あなたの場合、あなたはあなたのサイトのドキュメントルートで/404.htmlを提供しています。

ただし、エラードキュメント内の静的リソースにrelative URLを使用しているように聞こえます。これは機能しません( baseタグを設定しない限り )-しかし、これには警告があります-以下を参照してください参照リンクエラードキュメントはどこからでも提供できるため、browserは相対URLを誤って解決します(少なくとも、意図したとおりではありません)。代わりに、ルート相対URL(/404.htmlで行ったようにスラッシュで始まる)または絶対URL(スキーム+ホスト名を含む)を使用する必要があります。

example.com/parent/nonexistentpage.htmlにアクセスすると、URLは変更されませんが、一般的なスタイルなしの404エラーメッセージが表示されます

ErrorDocumentディレクティブが/404.htmlを提供するように設定されており、/404.htmlで相対パスを使用していると仮定すると、相対URLパスは/parent "ディレクトリに対して自然に解決されます。 example.com/nonexistentpage.htmlを要求した場合にそうするように、ドキュメントルートではありません。

要求されているURLに基​​づいて相対URLを解決するのはbrowserであることに注意してください。これは、サーバー上のファイルシステムパスとは関係ありません。

baseタグの使用に関する追加の例と説明については、他の関連する質問を参照してください。

1
MrWhite