久々にBasic認証をつけようとしたらやり方が全くわからなくなってたことに気づいたのでメモしておきます。
簡単なレシピ
.htaccess
AuthUserfile /フルパス/.htpasswd
AuthGroupfile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
もっとくわしく
- AuthUserfile /フルパス/.htpasswd
- サーバーのルートディレクトリからの.htpasswdへのパスを指定する。/usr/local/...とか/home/pass/...とかそういうの。
- AuthGroupfile /dev/null
- グループごとにアクセスを許可する、という指定。「/dev/null」とは、そのようなファイルは存在しないという意味。つまりグループごとでのアクセス制限はしないという意味。
- AuthName "Please enter your ID and password"
- ダイアログに表示される文章を指定。日本語だと文字化けするようだ。
- AuthType Basic
- AuthTypeを指定。「Basic(ベーシック認証)」と「Digest(ダイジェスト認証)」の2種類があって、Digestのほうが安全らしい。
- require valid-user
- ユーザーが誰であろうと、入力したIDとパスワードが合っていればアクセスできるという意味。特定ユーザーだけにアクセスさせたい場合は「require user xxx」とかする。
- .htpasswd
- IDとパスワードを書きこむファイル。.htpasswdというファイル名で作るらないといけないらしい。.htaccess用のパスワード作成ツールがネットにたくさん出回っているのでそこでコードを生成。例えばID/username,PASS/hogehogeとしたいとすると、username:us3HhKtHHqM0Uというコードを書けばよい。
- パーミッション
- パーミッションは604!これでだめなら644?
- その他注意事項
- ファイルの最後では改行したほうがいいかもしらんね。
いろいろな悩み
アップする場所
- .htpasswdのファイルは、DocumentRootより上に設置すること。
- それが無理な場合は.htaccessファイルに「AddHandler cgi-script htpasswd」の一行を加える。
- もしくは.htaccess ファイルに.htaccessと.htpasswdにアクセスできなくさせる下記のようなコードを書く。
.htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
500 Internal Server Error (T_T)
.htaccess ファイルに文法誤りがあると、500 Internal Server Error となる。再度チェックしてみること。
サーバーの設定によっては、.htaccessファイルの設定が無効になっていたり、設置場所が限定されていたり、ディレクティブの限定的な使用しか出来ない場合があって、その場合 500Internal Server Error が発生するとのこと。見たことないですが。そんなところは潔く諦めて他のサーバーを使うこと。
Authorization Required (T_T)
ID・パスワードには、記号は使えないかもしれないと思っている。今のところ使えた経験無し。使わなかったらうまくいくこと多し。なので記号を使わないで数字と英字だけでやってみてください。それでもだめなら単に記述間違いではと思います。
特定のIPからのみアクセスできるようにするには
下記を.htaccessに追加する。
.htaccess
Satisfy any
order deny,allow
allow from xx.xx.xx.xxx/xx.xx.xxx.xxx
deny from all