BASIC認証をかけた領域でも、特定のディレクトリやファイルだけ外したい場合の.htaccess記述方法について。
BASIC認証を使う機会として、単にディレクトリ全体にかけるだけでなく、
- WordPressサイトの管理画面へBASIC認証をかける場合(case1)
※/wp-admin ディレクトリ全体にBASIC認証をかけるとNG。ajaxは除外しないと動かなくなる
→サイトヘルスのあるWPバージョンからは、load-style.php, site-health.php等も除外 - WordPressサイトのログイン画面にBASIC認証をかける場合(case3)
※WordPressインストールディレクトリにあるwp-login.phpだけにBASIC認証でアクセス制限する
その他、
- ドメイン全体にBASIC認証をかけてテスト中の時に、特定のディレクトリだけ公開する(case2)
- 公開サイトで、特定ページだけに手っ取り早くBASIC認証をかけたい(case3)
といった場合があります。
今回はそのちょっとした条件を考慮したい場合の.htaccess記述方法です。
- 特定のファイルをBASIC認証から除外する(case 1)
- 特定のディレクトリをBASIC認証から除外する(case 2)
- 特定のファイルだけBASIC認証をかける方法(case 3)
1. 特定のファイルをBASIC認証から除外する(case 1)
例
BASIC認証から特定のファイルを外す方法AuthUserFile /home/xxxxx/private_html/.htpasswd
AuthGroupFile /dev/null
AuthName "*MembersOnly*"
AuthType Basic
require valid-user
<FilesMatch "(cominsoon\.php)$">
Satisfy Any
Order allow,deny
Allow from all
Deny from none
</FilesMatch>
方法
- BASIC認証を設置するディレクトリの.htaccessに上記を記述する
- 除外したいファイルを FilesMatch で指定する。
例は、cominsoon.phpの1ファイルを除外する場合ですが、正規表現で複数指定できます。
ポイントは、「Satisfy Any」
行1~5でディレクトリ全体をBASIC認証、行6~11のFilesMatchで指定ファイルのallowを、OR条件(Satisfy Any) にすることで、
BASIC認証と指定ファイルのどちらかの場合に、アクセスできるようになります。
なお、デフォルトは「Satisfy All」なので、「Satisfy Any」がないとAND条件となります。
Basic認証でcominsoon.php だけokみたいなことに
【注意】
.htaccessで ErrorDocument 401 ~ のエラーページを設定していると、404 Not Found になります。
ErrorDocument 401 は設定しないこと!
(設定するなら「ErrorDocument 401 default」)
BASIC認証設置直後に wp-login.php や wp-admin が 404ページになったら、確認しましょう。
Satisfy Any は他にも、BASIC認証とIP制限を合わせて、「特定のIPかまたはBASIC認証だけOKにする」といった使い方もできます。
2. 特定のディレクトリをBASIC認証から除外する(case 2)
BASIC認証下で特定のディレクトリだけ除外するには、
■ 除外するディレクトリの.htaccessに以下を記述
BASIC認証から特定のディレクトリを外す方法2Satisfy Any
Order allow,deny
Allow from all
Deny from none
で、できます。
一方、本題とは逆に
3. 特定のファイルだけBASIC認証をかける方法(case 3)
■ アクセス制限したいファイルのあるディレクトリで、.htaccessに以下を記述
WordPressログイン画面の例<Files wp-login.php>
AuthUserFile /home/xxx/private_html/.htpasswd
AuthGroupFile /dev/null
AuthName "* MembersOnly *"
AuthType Basic
require valid-user
</Files>
上記はwp-login.phpを制限する場合です。
Satisfy All(AND条件)により、BASIC認証かつwp-login.phpでアクセスokとなります。
(→WordPressインストールディレクトリに設置すると、ログイン画面だけBasic認証になります)
※WordPressの場合は、/wp-admin/にBASIC認証設置でよいかな。
※繰り返しますが、、まずhttpレスポンス401となるので、
ErrorDocument 401は設置しないか、ErrorDocument 401 defaultを忘れないこと。
以上でした。
追記)case番号の振り直し、ログイン画面への例に変更しました。