ある特定の人物にしかアクセスさせたくないページを作る場合であって、なんか面倒くさいとき、BASIC 認証を使うんですが、XAMPP ではなぜか使えませんでした。手軽に導入できるのが BASIC 認証の良いところであって、手軽に導入できなかったら諦めるべきところを、本日2時間かけて解決しましたので、まとめておきます。
※XAMPP が C ドライブ直下にインストールされているという設定でお話を進めていきます。皆さんの環境によって補完してくださいね。
一般的な BASIC 認証を使う方法
.htpasswd を書く
htpasswd 用パス作成ツール (phpspot) などを使って暗号化したパスワードを生成しましょう。
1 | admin:44E/qORekFV0E |
.htaccess を書く
例えば c:\web\weble.org でサイトを制作していて、そこに .htpasswd を置く場合は以下のように書くのが一般的ですよね。
1 2 3 4 5 6 7 8 9 | <Files ~ "^.(htaccess|htpasswd)$"> deny from all </Files> AuthUserFile c:\web\weble.org\.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user order deny,allow |
基本的なことや詳しいことについて説明は省きますが、以下のサイトがとても分かりやすくまとめてありますので、紹介しておきます。
.htaccessでベーシック認証 | バシャログ。
とりあえず、これで動くはずだと思うんですが、これじゃダメみたいです。XAMPP で BASIC 認証を使うには以下のようなことに気をつけなければいけません。 (気をつけた方が良いかもしれません。)
XAMPP で BASIC 認証を使う方法
htpasswd.exe を使用する
Apache に入っている htpasswd.exe を使って、パスワードファイルを生成することができます。使い方は、Windows XP であれば [アクセサリ] -> [コマンドプロント] を起動して、以下のように書きます。
1 | c:\> [htpasswd] [コマンド] [生成場所] [id名] |
htpasswd
htpasswd はデフォルトでは apache\bin に入っていると思います。XAMPP をインストールしたのなら、xampp\apache\bin にあるのではないでしょうか。細かいことは適当で良いですよね(笑)
コマンド
htpasswd.exe のコマンドについては以下のサイトが分かりやすいのですが、少し見にくかったので引用して表にまとめさせていただきました。
株式会社エスロジカル – 技術ドキュメント Apache:htpasswd コマンド
コマンド | 説明 |
---|---|
-c | 新しいパスワードファイルを作成します。もし、同名のパスワードファイルがすでに存在する場合は、既存の内容が削除されます。 |
-n | どのような結果になるかのみを標準出力して終了します。パスワードファイルを変更しません(テスト実行用)。 |
-m | パスワードをファイルに書き込む際、MD5 でハッシュします。 |
-d | パスワードをファイルに書き込む際、CRYPT でハッシュします(デフォルト)。 |
-p | パスワードをファイルに書き込む際、ハッシュしないで、プレーンなテキストのまま書き込みます。 |
-s | パスワードをファイルに書き込む際、SHA でハッシュします。 |
-b | パスワードを、対話式入力ではなくて、コマンドライン引数として指定できるようにします。 |
今回は MD5 でハッシュして新しくファイルを生成したいので、-mc が良いのでしょうか。MD5 以外でいけるかわかりませんが、私はこれで成功しましたので、この方法を紹介しておきます。
生成場所
なんかこれ、どこでも良いと思って適当なフォルダに生成していたんですが、ダメでした。いろいろ試行錯誤を繰り返して、apache\bin フォルダの中に生成したら上手く行きましたよ。
id 名
今回は admin にすることにします。これは何でも大丈夫です。
そんで、これらを考慮して書くと、以下のようになります。
1 | c:\> c:\xampp\apache\bin\htpasswd -mc c:\xampp\apache\bin\.htpasswd admin |
これを入力してエンターを押すとパスワードの入力を2回要求されるので、2回入力すれば、指定した場所に生成されます。
もちろん .htaccess は以下のように書きなおしておいてくださいね。
1 2 3 4 5 6 7 8 9 | <Files ~ "^.(htaccess|htpasswd)$"> deny from all </Files> AuthUserFile c:\xampp\apache\bin\.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user order deny,allow |
これで上手くいくんですが、なぜこうじゃなきゃダメなんでしょうか。詳しい方がおられましたら、ぜひコメントなどして教えてください。また何か表現や説明などで間違っている部分がありましたら指摘よろしくお願い致します。
kakiflowerさんのコメント
htaccessの記述に関して、コピペで動かないなと思い、ログを見たところ
「Invalid command ‘AutdUserFile’」
そんなコマンドありませんよと言われてしまいました。
誤:Autd~
正:Auth~
単純なタイプミスかもしれませんが、ご報告です。
webleさんのコメント
kakiflower様、コメント頂きありがとうございます。修正させて頂きました。