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