この記事では Apache でErrorDocument
ディレクティブと Location
ブロックを使ったカスタムエラーページを設定する方法を解説します。
やること
今回は以下の構成で進めます。
/var/www/html/ ├── index.html ├── 404.html └── special/ ├── index.html └── special_404.html
ErrorDocument
ディレクティブで通常の404時は/var/www/html/404.html
を表示させ、Location
ブロックを組み合わせて /special/ ディレクトリ配下の404時は /var/www/html/special/special_404.html
を表示させます。
ErrorDocument
ディレクティブでエラードキュメントを設定する
今は存在しないtest.htmlにアクセスすると以下のデフォルトのエラーページが表示されます。
これを以下のエラーページが表示されるように設定します。
[root@ip-10-0-1-167 ec2-user]# cat /var/www/html/404.html <title>404 Not Found</title> <p>`ErrorDocument` ディレクティブで設定したエラーページ</p> [root@ip-10-0-1-167 ec2-user]#
1: confファイルの編集
VirtualHost
ブロック内に ErrorDocument
ディレクティブを追記します。
今回は 404 エラーに対して /404.html
を表示させます。
# httpd.conf <VirtualHost *:80> DocumentRoot "/var/www/html" ServerName www.example.com # ... 他の設定 ... # サイト共通の404エラーページを指定 ErrorDocument 404 /404.html </VirtualHost>
設定を反映させるため Apache の再起動を忘れず行いましょう。
sudo systemctl restart httpd
2: アクセス確認
再びブラウザからアクセスするとErrorDocument
で指定した 404.html
の内容が表示されることが確認できます。
Locationブロックを組み合わせてディレクトリごとに特定のエラーページを設定する
現在、/special/
の存在しないページにアクセスすると先ほど設定したエラーページが表示されます。
これを以下のエラーページが表示されるように設定します。
[root@ip-10-0-1-167 ec2-user]# cat /var/www/html/special/special_404.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>404 Not Found</title> </head> <body> <p>Locationブロックで上書きしたエラーページ</p> </body> </html> [root@ip-10-0-1-167 ec2-user]#
手順1: confファイルの編集
ファイルに “ ブロックを追加します。
このブロック内で ErrorDocument
を再度定義します。
# httpd.conf <VirtualHost *:80> DocumentRoot "/var/www/html" ServerName www.example.com # ... 他の設定 ... # サイト共通の404エラーページを指定 ErrorDocument 404 /404.html # /special/ ディレクトリ内でのみ設定を上書き <Location /special/> ErrorDocument 404 /special/special_404.html </Location> </VirtualHost>
設定を反映させるため Apache の再起動を忘れず行いましょう。
sudo systemctl restart httpd
2: アクセス確認
/special/
ディレクトリ配下の存在しない test.html
へアクセスするとLocation
ブロックで指定した special_404.html
の内容が表示されることが確認できます。
比較のため再度ルート直下の存在しない test.html
へアクセスします。
こちらは先ほどの 404.html
が表示されることが確認できます。
これにより /special/
配下のみエラーページが上書きされていることがわかります。
まとめ
この記事では、ApacheのErrorDocument
ディレクティブとLocation
ブロックを使用して、Webサイトの特定の部分に異なるエラーページを表示する方法を解説しました。
ErrorDocument
ディレクティブ: サイト全体で共通のカスタムエラーページ(例:404 Not Found)を設定します。Location
ブロック: 特定のディレクトリ(例:/special/
)に対して設定を上書きします。
この2つを組み合わせることで、通常はサイト共通のエラーページを表示させつつ、特定のディレクトリ配下でエラーが発生した際には、そのディレクトリ専用のエラーページを見せるといった柔軟な設定が可能です。これにより、ユーザーに対してより親切なナビゲーションを提供できます。