この記事では 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つを組み合わせることで、通常はサイト共通のエラーページを表示させつつ、特定のディレクトリ配下でエラーが発生した際には、そのディレクトリ専用のエラーページを見せるといった柔軟な設定が可能です。これにより、ユーザーに対してより親切なナビゲーションを提供できます。