---
title: "Basic認証でアクセス制限する方法|.htaccessと.htpasswdの設定"
description: "Apacheサーバーでのベーシック認証の設定方法を解説します。.htaccessと.htpasswdファイルの書き方、特定IPのみ許可する組み合わせ設定、パスワード生成方法、よくあるエラーの対処法をまとめました。"
date: 2026-07-09
category: セキュリティ
tags: [Basic認証]
related_tools: [htaccess]
draft: false
---
**Basic認証(ベーシック認証)** は、URLにアクセスしたときにIDとパスワードの入力を求めるアクセス制限の方法です。Apacheサーバーでは `.htaccess` と `.htpasswd` ファイルで設定できます。
## 用途
- 公開前のWebサイト・ステージング環境へのアクセス制限
- 管理者専用ページの保護
- 特定メンバーだけ閲覧できるコンテンツの制限
## 設定ファイルの構成
```
/var/www/html/ ← Webルートディレクトリ
├── .htaccess ← 認証設定(アクセス制限をかけるディレクトリに置く)
└── .htpasswd ← ユーザー名とハッシュ化パスワードの一覧
```
`.htpasswd` はWebルートの外(ドキュメントルートの外)に置くのが理想ですが、`.htaccess` でアクセスを禁止する方法でも対処できます。
## .htpasswdファイルの作成
### htpasswdコマンドで生成(推奨)
```bash
# 新規ファイルを作成してユーザーを追加(-c オプション)
htpasswd -c /path/to/.htpasswd username
# 既存ファイルにユーザーを追加(-c なし)
htpasswd /path/to/.htpasswd username2
# bcryptハッシュを使う場合(より安全)
htpasswd -B /path/to/.htpasswd username
```
実行後にパスワードの入力を求められます。`.htpasswd` の内容は以下のような形式になります:
```
username:$apr1$xxxxx$xxxxxxxxxxxxxxxxxxxxxxx
username2:$2y$05$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```
### オンラインツールで生成
サーバーへのSSHアクセスができない場合、「htpasswd generator」で検索するとブラウザ上でハッシュを生成できるツールがあります。生成されたハッシュを `.htpasswd` に貼り付けます。
## .htaccessの設定
### 基本的な設定
```apache
AuthType Basic
AuthName "Protected Area"
AuthUserFile /var/www/.htpasswd
Require valid-user
```
| ディレクティブ | 説明 |
|---|---|
| `AuthType Basic` | 認証方式(Basicを指定) |
| `AuthName` | ブラウザのダイアログに表示される説明文 |
| `AuthUserFile` | `.htpasswd` ファイルの絶対パス |
| `Require valid-user` | 有効なユーザーのアクセスを許可 |
**重要**: `AuthUserFile` には絶対パスを指定します。相対パスは動作しません。サーバー上のパスは `phpinfo()` や `pwd` コマンドで確認できます。
### 特定ユーザーのみ許可する
```apache
AuthType Basic
AuthName "Admin Only"
AuthUserFile /var/www/.htpasswd
Require user admin
```
`Require user ユーザー名` で特定ユーザーのみを許可できます。
### 特定IPは認証なし・それ以外は認証あり
```apache
AuthType Basic
AuthName "Protected Area"
AuthUserFile /var/www/.htpasswd
# Apache 2.4以降
Require ip 192.168.1.0/24
Require valid-user
```
社内ネットワークのIPからはパスワードなし・外部からはパスワード入力を求める設定例です。
## WordPressへのBasic認証設定時の注意
WordPressにBasic認証をかけると、WordPressの内部リクエスト(cronなど)が認証で弾かれることがあります。
WordPress管理画面(`/wp-admin/`)を除外する設定:
```apache
# ルートに置く .htaccess
AuthType Basic
AuthName "Protected Area"
AuthUserFile /var/www/.htpasswd
Require all denied
# wp-adminディレクトリへのアクセスは許可
Require ip 自社IPアドレス
Require valid-user
```
また、XMLRPCへの直接アクセスをBasic認証で保護することで、ブルートフォース攻撃も防げます。
## .htpasswdファイルの保護
`.htpasswd` がWebルート内にある場合、直接アクセスされないように `.htaccess` に以下を追加します:
```apache
Require all denied
```
## よくあるエラーと対処
### 500 Internal Server Error
`.htaccess` の記述ミスが原因であることがほとんどです。
**確認ポイント:**
- `AuthUserFile` のパスが正しいか(絶対パスを使っているか)
- `.htpasswd` が存在し、読み取り可能なパーミッションか(644推奨)
- Apache の `AllowOverride` が `All` または `AuthConfig` になっているか
### パスワードを入力しても認証されない
- `.htpasswd` のユーザー名・パスワードが正しく生成されているか確認する
- パスワードハッシュの形式がApacheのバージョンと対応しているか確認する(bcryptを使う場合は `mod_authn_core` が必要)
### Basic認証の限界
Basic認証は簡易的なアクセス制限です。通信がHTTPSでない場合、ID・パスワードが平文で送信されます。本番環境では必ずHTTPS(SSL)と組み合わせて使用してください。