2026年5月20日

2026年5月20日

WordPressの特定ディレクトリを.htaccessでパスワード保護する方法

はじめに

WordPressの管理画面(/wp-admin/)や特定のディレクトリに二重のパスワード保護を設けることで、不正アクセスやブルートフォース攻撃を大幅に防ぐことができます。.htaccess によるBasic認証はWordPressの認証より前に動作するため、非常に効果的です。

前提条件

  • Apacheサーバーが .htaccess を許可していること(AllowOverride AuthConfig
  • FTPまたはSSHでファイル操作できること

手順

ステップ1:.htpasswdファイルを生成

# SSHでhtpasswdコマンドを使用(推奨)
htpasswd -c /home/username/.htpasswd wpuser

# または手動でハッシュ値を生成(SSHが使えない場合)
# Webツール: htpasswd Generator を使用
# 生成例: wpuser:$apr1$xyz...$ハッシュ値

重要: .htpasswd はWebから直接アクセスできない場所(ドキュメントルートの外)に設置します。

ステップ2:wp-adminを保護する.htaccessを作成

/wp-admin/.htaccess に以下を追加(既存ファイルがある場合は末尾に追記):

AuthType Basic
AuthName "WordPress Admin - 管理者専用"
AuthUserFile /home/username/.htpasswd
Require valid-user

# wp-admin-ajax.php はBasic認証から除外(プラグインの動作に必要)
<Files "admin-ajax.php">
    Satisfy Any
    Allow from all
</Files>

ステップ3:動作確認

ブラウザで /wp-admin/ にアクセスすると、ブラウザのダイアログでユーザー名・パスワードを求められます。正しく入力後にWordPressのログイン画面が表示されれば成功です。

Nginx環境の場合

location /wp-admin/ {
    auth_basic "WordPress Admin";
    auth_basic_user_file /etc/nginx/.htpasswd;

    # admin-ajax.phpは除外
    location = /wp-admin/admin-ajax.php {
        auth_basic off;
        try_files $uri =404;
        fastcgi_pass php-fpm;
        include fastcgi_params;
    }
}

特定のIPのみ許可する方法(Basic認証不要)

# /wp-admin/.htaccess
Order deny,allow
Deny from all
Allow from 203.0.113.1   # 自分のIPアドレス
Allow from 198.51.100.0/24  # オフィスのIP範囲

WordPressログイン自体を保護(wp-login.php)

# /wp-login.php と同じディレクトリ(ルート)の .htaccess に追記
<Files "wp-login.php">
    AuthType Basic
    AuthName "WordPress Login"
    AuthUserFile /home/username/.htpasswd
    Require valid-user
</Files>

よくある問題

# Error: 500 Internal Server Error の場合
# → .htaccess の構文エラーを確認
# → AuthUserFile のパスが絶対パスか確認

# Error: ログインできない(リダイレクトループ)の場合
# → admin-ajax.php の除外設定が正しいか確認

注意事項

  • .htpasswd はドキュメントルート外(/home/username/ など)に置くこと
  • admin-ajax.php を除外しないとWordPressの各種機能が壊れます
  • Basic認証の通信はHTTPSで行うこと(HTTP では平文で送信される)
  • WooCommerceなど一部プラグインは追加の除外設定が必要な場合があります

まとめ

.htpasswd をドキュメントルート外に作成し、/wp-admin/.htaccessAuthType Basic 設定を追加するだけで管理画面を二重保護できます。admin-ajax.php の除外設定を忘れずに行ってください。

お気軽にご相談ください

お見積りへ お問い合わせへ