Apacheで特定の拡張子へのアクセスを制限(403:Forbidden)する方法

目次

スポンサードリンク

ApacheはオープンソースのWebサーバソフトウェアです。この記事では、Apacheで配信するコンテンツの内、特定の拡張子を持つファイルだけアクセスできないよう制御する方法を解説します。 セキュリティ上の理由でアクセスを制限したいファイルの拡張子がある場合などは役に立つ設定方法です。

LocationMatchディレクティブを使う方法

LocationMatchディレクティブは、正規表現を用いて特定のURLパターンに一致するリクエストに対してのみ設定を適用することができます。正規表現は、URLパターンに一致するリクエストのみを対象とします。

以下サンプルは、/data/ 配下のPDFファイルのみアクセスできないように制御します。 パス部分が /data/ で始まるURLで、末尾が .pdf であるファイルに一致するリクエストが対象となります。

    <LocationMatch "^/data/(.*)\.pdf$">
        Require all denied
    </LocationMatch>

設定ファイルに上記追加後、Apacheを graceful または restart することで設定を反映することができます。 ブラウザで条件にマッチするURLにアクセスすると ステータスコード 403(Forbidden)のエラー画面が表示されるはずです。

上記設定は大文字小文字を区別するので、拡張子が大文字で.PDFの場合は設定が適用されない点は注意です。

複数の拡張子を指定する方法

正規表現ではパイプ(|)で条件を区切ることで複数の条件を指定することができます。以下サンプルは、 パス部分が /data/ で始まるURLで、末尾が .pdf、.jpg、.png のいずれかに一致するリクエストが対象となります。

<LocationMatch "^/data/(.*)\.(pdf|jpg|png)$">
    Require all denied
</LocationMatch>

参考ドキュメント
https://httpd.apache.org/docs/2.4/sections.html


Linuxの基礎からセキュリティまで、サーバー運用に必要な知識をまとめた書籍

Webシステムの基礎について徹底的に学べるUdemy講座
【PHP, MYSQL, Apache】ガチで学びたい人のためのWEB開発の基礎 icon

関連記事