ベーシック認証でアクセス制限をかける手順

まあ、.htaccess を使ったベーシック認証のやり方なんて、ネット上で調べたらあちこちに出てくるので、いまさら感がありますが、自分用まとめということで記載しておきます。
例えば、phpMyAdmin フォルダにベーシック認証をかける場合。

■ 下準備をする

ベーシック認証をかけるには、正確なサーバーパスが必要です。
わからなければ、以下の記述をコピペして、新規テキストにして保存し、ファイル名を getpath.cgi にして phpMyAdmin フォルダにアップロードしてください。そして、パーミッション(実行権限)を705に変更して、実際にブラウザでgetpath.cgi にアクセスすると、正確なサーバーパスが表示されます。

#!/usr/bin/perl

use strict;

my $file = 'getpath.cgi';
$ENV{'SCRIPT_FILENAME'} =~ /(.*)$file$/;
my $myroot = $1;

print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<meta http-equiv=\"content-type\" content=\"text/html; charset=shift_jis\">\n";
print "<title>Get Path</title>\n";
print "</head>\n";
print "<body>\n";
print "$myroot\n";
print "</body>\n";
print "</html>\n";
exit;

サーバーパスが表示されたら、それを何処かメモ帳にでも一時的に保存したら、getpath.cgi は削除してください。残しててもリスクしかありません。

1. phpMyAdmin フォルダ直下に .htaccess 設置する

内容は以下のとおり。 ハイライト部分の AuthUserFile の .htpasswd より前の「/home/example/www/phpMyAdmin/」は先ほど取得したサーバーパスに差し替えてください。

# ベーシック認証
AuthType Basic
AuthName "IDとパスワードを入力してください。"
AuthUserFile /home/example/www/phpMyAdmin/.htpasswd
AuthGroupFile /dev/null
require valid-user

# .htaccess への直アクセス遮断
<Files ~ "^.(htpasswd|htaccess)$">
 deny from all
</Files>

2. IDとパスワードを記述した .htpasswd を作成する

.htpasswd のパスワードは暗号化されてないとあまり意味がないので、暗号化する。
ベーシック認証用に暗号化してくれるサービスはネット上にたくさんあるので、それを利用するのが簡単だ。
例えば、「基本認証 パスワード 暗号化」などの用語で検索すると出てくる。

大抵IDとパスワードを入力すると、以下のような .htpasswd の形式で出力してくれるので、そのままテキストに貼り付けて、ファイル名を.htpasswd にして phpMyAdmin フォルダにアップロードする。

test:3gJUPDWwdZNHY

以上で作業は完了。
あとは、実際にphpMyAdmin にアクセスしてみてベーシック認証がポップアップされるか、入力したIDパスで入れるか、または、間違ったパスを入れたらブロックされるかを試験してください。

もし、正しいIDとパスで入力しているのに、入れないという場合は、.htaccess .htpasswd の文字コードを見直してください。
私の環境では、utf-8 で保存していたらダメで、shift-jisならOKだったことがあります。