会員制サイトなど、ログイン無しでの特定ファイルのアクセスを禁止したい。
手っ取り早いのは、Basic認証でディレクトリ以下を丸ごと保護する方法。だけど、いまどきBasic認証というのもちょっと。セッションを使ったログイン管理を行っているサイトにはそぐわないし。
別の方法としては、保護したいファイルをドキュメントルート外に配置して、プログラム経由でファイルにアクセスする方法。例えば、<img src=”cat.jpg”>とする代わりに<img src=”pic.php?name=cat.jpg”>とかして、pic.php中でユーザ認証を行えば良い。だけど、HTMLのカスタマイズが必要なので採用の敷居は高い。
mod_actionを使うと、HTMLのカスタマイズ無しに後者の方法が使えるらしい。以下参考サイトより覚え書き。
mod_actionsを使ってドキュメントや画像、Flashファイルを保護する|A Day In The Boy’s Life
http://ameblo.jp/itboy/entry-10696572358.html
1. mod_actionsモジュールをロードする
/etc/httpd/conf/httpd.conf
1 |
LoadModule actions_module modules/mod_actions.so |
2. .htaccessでMIMEタイプとプログラムを紐付ける
1 |
Action image/gif /check_login.php |
3. 保護の仕組みを実装する
check_login.php
1 2 3 4 5 6 7 8 |
<?php if (empty($_COOKIE['username'])) { header('HTTP/1.0 401 Unauthorized'); echo "Unauthorized. Please login"; } else { readfile($_SERVER['DOCUMENT_ROOT'] . $_SERVER['PATH_INFO']); } ?> |