2026年5月20日

2026年5月20日

WordPressのBASIC認証を設定してサイト全体を保護する方法

はじめに

開発中のサイトや公開前のステージング環境をBASIC認証で保護することで、検索エンジンのクロールや不正アクセスを防ぐことができます。WordPressでのBASIC認証設定方法を解説します。

解決手順(Apache)

ステップ1:.htpasswdファイルを作成する

# サーバーSSH上でhtpasswdコマンドを実行
# ウェブルートの外(/home/username/)に配置すること
htpasswd -c /home/username/.htpasswd your_username

# 追加ユーザーは -c なしで実行
htpasswd /home/username/.htpasswd second_user

# パスワードをオンラインで生成する場合
# htpasswd Generator(例: web2generators.com/apache-tools/htpasswd-generator)

ステップ2:.htaccessにBASIC認証を追加する

# .htaccess(WordPressルートディレクトリ)
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/username/.htpasswd
Require valid-user

# WordPress本体の動作に必要なURLを除外
<Files "wp-login.php">
    Require valid-user
</Files>

# REST APIとXMLRPCを除外(プラグインの動作に必要な場合)
<FilesMatch "^(xmlrpc\.php|wp-cron\.php)$">
    Satisfy Any
    Allow from all
</FilesMatch>

ステップ3:特定ディレクトリのみ保護する場合

# /wp-admin/ のみBASIC認証
# .htaccess を wp-admin/ ディレクトリに配置

# wp-admin/.htaccess
AuthType Basic
AuthName "WordPress Admin"
AuthUserFile /home/username/.htpasswd
Require valid-user

# admin-ajax.php は除外(プラグイン動作に必須)
<Files "admin-ajax.php">
    Satisfy Any
    Allow from all
</Files>

ステップ4:Nginxでの設定

# nginx.conf または サイト設定ファイル
server {
    # サイト全体にBASIC認証
    auth_basic           "Restricted Area";
    auth_basic_user_file /home/username/.htpasswd;

    # wp-login.php は認証を維持
    location = /wp-login.php {
        auth_basic           "WordPress Admin";
        auth_basic_user_file /home/username/.htpasswd;
        fastcgi_pass php-fpm;
    }

    # REST APIを除外する場合
    location /wp-json/ {
        auth_basic off;
        try_files $uri $uri/ /index.php?$args;
    }
}

ステップ5:WordPressからBASIC認証情報を送信する

REST APIやWP-CLIをBASIC認証環境で使う場合:

// wp-config.php — WordPressのHTTPリクエストにBASIC認証を付与
define('WP_HTTP_BLOCK_EXTERNAL', false);
add_filter('http_request_args', function($args, $url) {
    if (strpos($url, home_url()) !== false) {
        $args['headers']['Authorization'] = 'Basic ' . base64_encode('username:password');
    }
    return $args;
}, 10, 2);

注意事項

  • .htpasswd ファイルはウェブルート(public_html)の外に配置してください。ルート内に置くとブラウザからアクセスできてしまいます
  • BASIC認証はHTTPSと組み合わせて使用してください。HTTPではパスワードが平文で送信されます
  • admin-ajax.php をBASIC認証から除外しないと、フロントエンドでAJAXを使うプラグインが動作しなくなります

まとめ

WordPressのBASIC認証は .htaccess.htpasswd ファイルで設定します。admin-ajax.php を除外することを忘れずに、必ずHTTPS環境で使用してください。ステージング環境の保護に最適です。

お気軽にご相談ください

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