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/.htaccess に AuthType Basic 設定を追加するだけで管理画面を二重保護できます。admin-ajax.php の除外設定を忘れずに行ってください。