.htaccessを用いた特定ファイルへのアクセス禁止(Apache2.4-)

ApacheをWebサーバーとして使用する際に,サーバ上の特定のファイルに対するアクセスを禁止したいことがあります.アクセスについて設定する方法の一つに.htaccsessを用いる方法がありますが,今回は少し詰まったところ(500エラーの発生)があったので備忘録として解決方法を残しておくことにします.

環境

  • Ubuntu 16.04
  • Apache / 2.4.18

やりたいこと

特定のファイル(foo.php)に対するアクセスをすべて禁止したい

500エラーが出た書き方

<Files "foo.php">
 order deny, allow
 deny from all
</Files>

エラーが出ない書き方

<Files "foo.php">
 deny from all
</Files>

正直,なぜ動作に違いが出るのかわからない…

そもそもApache2.4以降ではアクセス制限の書き方が違うらしい

上に書いたのはApache2.2以前での記法で,Apache2.4以降のモダンな書き方は以下のようになる(らしい)

<Files "foo.php">
 Require all denied
</Files>

中途半端に昔の記法で動くせいで原因がわかるまで結構時間がかかってしまいました….正直,UbuntuもcentOSもパッケージでApache2を入れると2.4以降のヴァージョンが入るからこのあたりの変更はもっと広まってもいいと思う.

参考文献

Apache2.2以前 から Apache2.4 に移行でのアクセス制限の書き方の違い

.htaccess(Apache) の Order Allow,Deny(またはDeny,Allow)について

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top