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

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 のパスはサーバー環境に応じて変更してください(絶対パスが必要)。

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のパス確認にはツールを活用すると便利

ALTERNATE tools:便利な認証設定ツール一覧はこちら

PAGE TOP