Basic認証を特定のディレクトリだけにかける方法

Basic認証を特定のディレクトリだけにかける方法
目次
Basic認証(ベーシック認証)は、簡易的にアクセス制限をかけるのに便利ですが、サイト全体ではなく特定のディレクトリやURLだけに適用したいケースも多くあります。
たとえば、開発中のページや管理者向け資料だけを保護したいときに有効です。
基本の考え方
認証は「.htaccessを設置したディレクトリ」以下にのみ効力があります。
つまり、制限したいディレクトリ内にだけ.htaccess
と.htpasswd
を設置すれば、他のページには影響を与えません。
手順1:.htpasswdを用意する
まず、ユーザー名とパスワードを記述した.htpasswd
ファイルを作成します。
以下のような形式で記述されます:
username:$apr1$GHi7...(暗号化されたパスワード)
▶ ALTERNATE tools:.htpasswd作成ツールで簡単に生成できます。
手順2:制限したいディレクトリに.htaccessを設置
次に、Basic認証をかけたいディレクトリに以下の内容で.htaccess
を作成・設置します。
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/example/public_html/protected/.htpasswd
Require valid-user
AuthUserFile のパスはサーバー環境に応じて変更してください(絶対パスが必要)。
手順3:特定のURLだけに認証をかける(SetEnvIfを使う方法)
ディレクトリ単位ではなく、特定のURL(たとえば /private/report.pdf だけ)に認証をかけたい場合は、SetEnvIf
ディレクティブを使うことで柔軟な対応が可能です。
以下のように記述します:
SetEnvIf Request_URI "/private/report\.pdf$" require_auth
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/example/public_html/.htpasswd
Require valid-user
Order allow,deny
Satisfy any
Allow from env=!require_auth
この例では、URLが「/private/report.pdf」で終わるリクエストにのみ認証を求めるようになります。
ポイント:
- 複数URLに対応するには
SetEnvIf
を複数行記述可能 - 正規表現の使い方に注意(バックスラッシュのエスケープ)
- 全体が「Order/Satisfy」で柔軟な認可制御になっていることを確認
手順4:他の場所に影響が出ないか確認
- 認証はそのディレクトリ以下にのみ適用されます
- 上層ディレクトリ(親やルート)に
.htaccess
がある場合、継承されることがあるので注意 - 不要な場所に
.htaccess
がないか確認しましょう
WordPressで特定ディレクトリを保護する場合
WordPressの中で `/private/` や `/manual/` フォルダなどを制限したい場合でも、同様の方法でOKです。
ただし、WordPressテーマやプラグインが `.htaccess` を自動生成・更新することがあるため、対象ディレクトリを `/wp-content/uploads/` などの動的フォルダにはしない方が安全です。
まとめ
- Basic認証は
.htaccess
を設置したディレクトリ以下にだけ適用される SetEnvIf
を使えば、URL単位で制御することも可能- .htpasswdの生成やAuthUserFileのパス確認にはツールを活用すると便利