Web制作では公開前のサイトや検索結果に表示させたくないページをBaisc認証を使って閲覧制限をかけることが多くあります。
「とりあえずhtaccessにこれ書いておけば動く」と、仕組みはよくわからず使っている人も多いと思います。今回はそんなBasic認証の紹介をしたいと思います。
Basic認証は「.htaccess」というWebサーバーの設定ファイルに記述します。
そして、閲覧に必要なIDとパスワードを設定した「.htpasswd」のファイルを用意してあげます。これら2つのファイルを、認証をかけたいディレクトリにアップします。
まずは基本的な使い方から、「.htaccess」に以下を追記します。
1 2 3 4 |
AuthType Basic AuthName "Protected Area" AuthUserFile /xxx/yyy/zzz/.htpasswd require valid-user |
「AuthUserFile」には「.htpasswd」のサーバールートからのパスを指定します。「.htpasswd」はパスワードを暗号化した状態でIDとペアで設定します。
1 |
ID:password |
コロンを挟んでIDとパスワードのペアを1行ずつ記述します。パスワードは素のテキストでは使えず、暗号化する必要があります。
「.htaccess による認証用 パスワード暗号化ツール」で簡単にIDと暗号化したパスワードを作ることができます。
「.htpasswd」で設定したID/パスワードでBasic認証下のページにアクセスできるようになります。
Basic認証は基本的に認証をかけたディレクトリ以下は全て認証が必要になりますが、特定のファイルだけ認証をかけたくない場合は、「.htaccess」に以下を追記します。
1 2 3 4 5 6 |
<FilesMatch "(xxx\.php)$"> Satisfy Any Order allow,deny Allow from all Deny from none </FilesMatch> |
「FilesMatch “(xxx\.php)$”」の(xxx\.php)は正規表現で除外したいファイルを指定しています。正規表現にマッチするファイルは認証なしでアクセスできるようになります。
ファイルではなくディレクトリも認証から除外することができます。ディレクトリの場合は下の階層のディレクトやファイル全てが除外対象となります。
ディレクトリの場合は、対象にするディレクトリの「.htaccess」に以下を記述します。
1 2 3 4 |
Satisfy Any Order allow,deny Allow from all Deny from none |
Basic認証下でも特定のIPからのアクセスの場合は認証なしでアクセスできるようにすることもできます。
具体的な利用場面としては、プログラムからBasic認証下のファイルにアクセスする場合などがあります。
基本的な書き方に以下を追記します。
1 2 3 4 5 6 7 8 9 |
Satisfy Any Order deny,allow Deny from all Allow from 111.222.333.444 AuthType Basic AuthName "Protected Area" AuthUserFile /xxx/yyy/zzz/.htpasswd require valid-user |
「allow from 111.222.333.444」で許可するIPアドレスを指定します。
GETやPOSTなどの特定のリクエストのみ認証をかけることも出来ます。「.htaccess」に以下を追記します。
1 2 3 |
<Limit GET POST> require valid-user </Limit> |
上記の場合だと、GETとPOSTリクエストがある場合に認証が必要になります。
例えばAPIでPostするときに、Basic認証があってエラーになってしまう場合は、LimitからPOSTを外してあげると良いでしょう。
いかがでしょうか。
簡易的に閲覧制限を設けるのみBasic認証はお手軽な手段なので、使う場面は多いですが、プログラムの処理やAPI、SNSまわりでページを取得できずにエラーになってしまうケースもあると思います。そういった時に上記のような設定をしてあげると上手くいくかもしれません。