.htaccess + htpasswd による Basic 認証

  • 投稿日:
  • by

Apache の提供する機能でアクセス制限を行います。

ブログは認証をかけずに、管理画面にアクセスする際に認証を行う手順を書きます。
ごく普通の Basic 認証ではあるのですが、MT を使ってブログを作っている場合、サイト内の検索やコメントなど、ブログディレクトリではなく MT のインストールディレクトリ内の CGI ファイルにアクセスが行われます。そのため、ブログの一部にも Basic 認証がかかってしまいます。
それでは望んだかたちにはならないので、ちょっと工夫してみることにしました。

まず、一般ユーザーでサーバーにログインし、htpasswd コマンドで認証ユーザーの情報を格納するファイルを作成します。

[user@host ~]$ htpasswd -c /home/user_dir/.htpasswd (認証ユーザー名を入力)
New password: (パスワードを入力)
Re-type new password: (再度確認のためパスワードを入力)
Adding password for user [ユーザー名]

ファイル名は何でもいいのですが、ここでは慣例的に .htpasswd とします。
そして、.htaccess ファイルを作成します。もちろんこちらは自由なファイル名とはいきませんw

[user@host ~]$ vi /home/user_dir/cgi-bin/app_dir/.htaccess

そして、以下の内容を入力します。

AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /dev/null
AuthName "Limited Area"
AuthType Basic
Require valid-user

<FilesMatch "^.(htpasswd|htaccess)$">
    deny from all
</FilesMatch>

<FilesMatch "^(scriptfile1|scriptfile2|scriptfile3)\.cgi">
    Satisfy Any
</FilesMatch>

上半分はごく普通の Basic 認証のやり方です。で、大事なのはその後。
まず、FilesMatch ディレクティブで正規表現を使い、.htaccess と .htpasswd へのアクセスは、問答無用で拒否するという内容。

次のブロックは、scriptfile1.cgi、scriptfile2.cgi、scriptfile3.cgi に対するアクセスは認証なしで許可するというもの。この名前の中に、ブログ上からアクセスされるファイル名を入れておけば認証なしでコメントやサイト内検索ができる。
各ディレクティブについては、Apache のマニュアルを参照のこと。