特定のディレクトリやファイルをBASIC認証から除外する

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記述方法です。

INDEX
  1. 特定のファイルをBASIC認証から除外する(case 1)
  2. 特定のディレクトリをBASIC認証から除外する(case 2)
  3. 特定のファイルだけ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番号の振り直し、ログイン画面への例に変更しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です