作成日:2018-04-19, 更新日:2018-10-19
基本
BASIC認証にしたいディレクトリに「.htaccess」のファイルを置く。
「.htaccess」のファイルを置いたディレクトリ内(サブディレクト内も)が対象
AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user
「AuthName」は認証させるときのユーザーへのメッセージであり、IDになる。
※複数個所でBASIC認証させるときに「AuthName」の値を変更すると、設置個所で毎回BASIC認証のダイアログが発生。
「AuthUserFile」は「.htpasswd」の絶対PATH。
ユーザー指定
アクセス可能なユーザーを指定。
「.htpasswd」のユーザーを指定。
▼「.htpasswd」で「ユーザー:zebra」のパスワードを設定
zebra:〇〇〇〇
▼「.htaccess」で「require」を「zebra」にする
AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require user zebra
※「require valid-user」ではなく「require user 〇〇〇」とする
・「require valid-user」 - IDとパスワードが設定されていたら何でもOK。
・「require user 〇〇〇」 - 「ID:〇〇〇」のみOK。
ファイル指定
「Files」で囲む。
<Files 〇〇〇.php> AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user </Files>
ファイル指定(複数)
「~ ()」の中にファイルを「|」区切りで入れる。
※「~」と「(」の間に半角空白あり。
<Files ~ (〇〇〇.php|〇〇〇.php)> AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user </Files>
ファイル単位でユーザーを変える
BASIC認証の基本情報は別にして、ファイル単位で「require user 〇〇〇」を指定でいけるらしいが・・・記述が間違っているのかサーバの設定の問題なのかは不明だけど、動作しなかった。特に使う予定が無かったので、これ以上の調査はしていない。
AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic <Files 〇〇〇.php> require valid-user </Files> <Files 〇〇〇.php> require valid-user </Files>
ファイルじゃなくてURL指定
「Files」じゃなく「LocationMatch」を使う・・・詳細は未調査。
※「LocationMatch」じゃなく「Location」ってのもあるらしい。
<LocationMatch "/〇〇〇/〇〇〇"> ~ 略 ~ </LocationMatch>
※記述か、サーバの設定か不明だけど、動作せず(※500エラーになってしまった)
ファイルじゃなくてURL指定2 / FuelPHPでも動作する指定
「Files」じゃなく「LocationMatch」も使わず・・・違うヤツを使う。
※太文字にしているトコ。
SetEnvIf Request_URI "/〇〇〇/〇〇〇" noauth AuthUserfile /home/users/1/moo.jp-metadoll/web/zebra/lib/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user Satisfy any Order Deny,Allow Deny from all allow from env=!noauth
※FuelPHPでも指定可能。
SetEnvIf Request_URI "/〇〇〇/〇〇〇" noauth | 対象 ・ページ指定(「hoge/zebra」にアクセスがあったとき):「SetEnvIf Request_URI "/hoge/zebra" noauth」 ・ディレクトリ指定(「hoge/」内の何かにアクセスがあったとき):「SetEnvIf Request_URI "/hoge/*" noauth」 |
---|---|
Satisfy any | 以下のどちかの場合、アクセスを許可 ・BASIC認証成功したとき(require valid-user) ・「SetEnvIf Request_URI」で指定したURLじゃないとき(allow from env=!noauth) |
Order Deny,Allow Deny from all |
ひとまず全員拒否 |
allow from env=!noauth | 「SetEnvIf Request_URI」で指定したURLじゃないときは許可 |
任意のURLへのアクセスのみBASIC認証をかける
基本、BASIC認証をかけない。でも、一部だけかけたいとき。
Satisfy Any # いずれかの条件を満たせばOK。記述場所はドコにあってもいいそうだ。 # 条件1:BASIC認証 AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user # 条件2:特定のディレクトリ SetEnvIf Request_URI "/zebra/" ngDir # 「ngDir」の値は「Request_URI」が「/zebra/」になる。 Order Deny,Allow # 「拒否してから、許可する」という順番指定 Deny from all # 全員拒否 allow from env=!ngDir # 「ngDir」以外にアクセスがあったら「許可」→「ngDir」は拒否するからBASIC認証を成功させる必要アリ
※「env!=」じゃなく「env=!」。「!」の位置が違うだけで意味が変わるっぽい。
任意のURLへのアクセスのみBASIC認証をかけない
基本、BASIC認証をかける。でも、一部だけかけたくないとき。
Satisfy Any # いずれかの条件を満たせばOK。記述場所はドコにあってもいいそうだ。 # 条件1:BASIC認証 AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user # 条件2:特定のディレクトリ SetEnvIf Request_URI "/zebra/" okDir # 「okDir」の値は「Request_URI」が「/zebra/」になる。 Order Deny,Allow # 「拒否してから、許可する」という順番指定 Deny from all # 全員拒否 allow from env=okDir # 「okDir」へアクセスがあったら「許可」→「okDir」以外は拒否するからBASIC認証を成功させる必要アリ
※「/zebra/」だと「/〇〇〇/zebra」も対象。「/^zebra/」とすると「/〇〇〇/zebra」は対象外。
特定の人のみBASIC認証をかけない
基本、BASIC認証をかける。でも、任意のサブドメインへのアクセスや、任意のIPの人はかけたくないとき。
Satisfy Any # いずれかの条件を満たせばOK。記述場所はドコにあってもいいそうだ。 # 条件1:BASIC認証 AuthUserfile /フルパス/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID and password" AuthType Basic require valid-user # 条件2:許可対象の指定 SetEnvIf Host "^zebra\." okHost # 「okHost」の値は「Host」が「^zebra\.」になる。 Order Deny,Allow # 「拒否してから、許可する」という順番指定 Deny from all # 全員拒否 allow from env=okHost # 「okHost」へアクセスがあったら「許可」 allow from XXX.XXX.XXX.XXX # 任意のIPの人からのアクセスも「許可」
Satisfy AnyとSatisfy All
・上記の例だと、「BASIC認証で成功した人」or「特定の条件を満たした人」という意味なので「Satisfy Any」。
・「特定の条件(A)」と「特定の条件(B)」の「両方を満たした人」という意味にしたければ「Satisfy All」。
※「IP制限+ディレクトリ制限」とかしたければ「Satisfy Any」