Basic認証を目的とした.htaccessファイルの作成方法と、記述方法を整理する。ドット.から始まる特殊なファイルなので、作成時の注意点をまとめる。
コンテンツ
.htaccessファイルの作成方法
任意の場所で新規ファイルを作成し、ファイル名を.htaccessに変更する。
あるいは、メモ帳を開き、編集後に.htaccessという名前をつけて保存する。このとき、拡張子が追加されないように注意する。ファイルの種類をすべてのファイルにして保存すると良い。
また、エラーを回避するため、最終行のあとに改行を入れる。VS Codeでは、保存時に自動整形が働き、改行が入るようだ。
Basic認証
# Basic認証
AuthType Basic
AuthName "[認証名]"
AuthUserFile ".htpasswdファイルの場所"
AuthGroupFile /dev/null
require valid-user
<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
- AuthType Basic
- 認証方式の設定
- 認証方式は
BasicとDigestがあり、ベーシック認証ではBasicと記述する
- AuthName ” [認証名] ”
- ダイアログに表示される文字列。Firefox、Chrome、Edgeで表示されなかった
- この認証の名前を任意で設定するできるが、半角英数字が良い。
- 必ずダブルクォーテーション
""で囲むこと
- AuthUserFile ”[.htpasswdファイルの場所]”
.htpasswdの設置場所- サーバー内のフルパスをスラッシュ
/始まりで記述 - 必ずダブルクォーテーション
""で囲むこと
- AuthGroupFile
- グループ毎に認証する際に使用
- ログインするグループのIDとパスワードを書いたファイルの場所を記載する
- ユーザー毎の認証の場合は
/dev/nullと記述するか、1行まるまる記述しない - 必ずダブルクォーテーション
""で囲むこと
- require valid-user
- 全ユーザーに認証を求めるようにするという意味
- AuthGroupFileを記述しているなら、Require group Adminなどもある
- <Files ~ “^\.(htaccess|htpasswd)$”> deny from all </Files>
- ブラウザから
.htaccess、.htpasswdにアクセスできないようにする記述
- ブラウザから
特定のファイルにBasic認証を設定
アクセス制限したいファイルのあるディレクトリに、以下を記述した.htaccess設置する。WordPressのlogin.phpにアクセス制限をかけ、ログイン画面に認証を表示させている。
<Files wp-login.php>
AuthUserFile /home/xxx/private_html/.htpasswd
AuthGroupFile /dev/null
AuthName "* MembersOnly *"
AuthType Basic
require valid-user
</Files>
Basic認証の部分的な解除
/child2/test2.htmlを除外したいとする。
- parent
- child1
- test1.html //アクセス不可
- child2
- test2.html //アクセス可能
- .htaccess //ここにアップロード。このディレクトリはアクセス許可
- .htaccess //このディレクトリはアクセス禁止
- child1
除外したいディレクトリに、下記を記述した.htaccessをアップロードする。
Satisfy Any
Order allow,deny
Allow from all
Deny from none
上記について解説すると、Apacheのアクセス制御には2通りある。
- ホストによる制御 (Order、Allow、Deny)
- ユーザ認証による制御 (Auth*、Require)
Satisfyは、2通りあるアクセス制御の両方を満たす必要があるかどうかを決定する。
| Satisfy All | 全ての条件をクリアしないとアクセスできない。デフォルト |
|---|---|
| Satisfy Any | いずれかの条件が通れば良い |
| Order deny,allow | 全てのホストからのアクセスを許可する |
| Order allow,deny | 全てのホストからのアクセスを拒否する |
| Deny from none | 拒否がなし |
.htaccessにスクリプトを記述して無効化する
アップロード済みの.htaccessを以下に書き換えるか、新規の.htaccessを作成してアップロードして上書きしても良い。
Satisfy any
order allow,deny
allow from all
.htaccessと.htpasswdは拒否設定不要
Apacheの設定ファイルには、.htaccessや.htpasswdなど、.htから始まるファイルはすべてデフォルトでアクセス拒否設定が書かれている。
<FilesMatch "^¥.ht">
Order allow,deny
Deny from all
</FilesMatch>
