2026年5月20日

2026年5月20日

WordPressの管理画面URLをデフォルトから変更する方法

はじめに

WordPressのデフォルトログインURL(/wp-admin//wp-login.php)は攻撃者に知られています。URLを変更するだけでブルートフォース攻撃のほとんどを無効化できます。ただし変更後のURLを忘れるとロックアウトされるため、必ず記録してください。

症状・原因

  • /wp-login.phpへのアクセスがサーバーログに大量記録されている
  • ブルートフォース攻撃でサーバー負荷が上がっている
  • セキュリティスキャンで「デフォルトのログインURLが露出している」と指摘された
  • 攻撃対象となるエンドポイントを隠してセキュリティを高めたい

解決手順

ステップ1:WPS Hide Login プラグインで変更する(推奨)

# WPS Hide Login プラグインをインストール
wp plugin install wps-hide-login --activate

# プラグインの設定
# WordPress管理画面 → 設定 → 一般 → 「ログインURL」を変更
# 例: https://example.com/my-secret-login

# WP-CLI で設定を確認
wp option get whl_page
// WPS Hide Login は wp_options にURLを保存する
// 直接設定する場合(プラグインインストール後)
update_option('whl_page', 'my-secret-login');
update_option('whl_redirect', '404'); // デフォルトURLへのアクセスを404にする

ステップ2:プラグインなしで変更する(.htaccess)

# .htaccess: /wp-login.php へのアクセスを新URLにリダイレクト
# ※ 新しいURLも設定が必要(下記参照)

<IfModule mod_rewrite.c>
RewriteEngine On

# カスタムログインURLを wp-login.php に内部転送
RewriteRule ^secure-login/?$ /wp-login.php [L,QSA]

# デフォルトの wp-login.php への直接アクセスをブロック
# (内部転送からのアクセスは許可)
RewriteCond %{THE_REQUEST} \s/wp-login\.php [NC]
RewriteRule ^wp-login\.php$ /404 [R=302,L]
</IfModule>

ステップ3:functions.phpで管理画面URLを変更する

// functions.php: ログインURLとログイン後のリダイレクトURLを変更
// ※ この方法だけでは wp-login.php への直接アクセスを防げないため
//    .htaccess と組み合わせる

// カスタムログインURLを返す
add_filter('login_url', function(string $login_url, string $redirect, bool $force_reauth): string {
    return home_url('secure-login') . ($redirect ? '?redirect_to=' . urlencode($redirect) : '');
}, 10, 3);

// デフォルトのwp-login.phpへのアクセスを404にリダイレクト
add_action('init', function(): void {
    // wp-login.php への直接リクエストをチェック
    $request_uri = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
    if (str_ends_with($request_uri ?? '', '/wp-login.php')) {
        // 正規のWordPressフローからではない場合はブロック
        if (!isset($_GET['action']) || !in_array($_GET['action'], ['logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register'], true)) {
            wp_redirect(home_url('/404'), 302);
            exit;
        }
    }
});

ステップ4:wp-admin へのアクセスを制限する

# .htaccess: /wp-admin/ を特定IPのみに制限
<IfModule mod_rewrite.c>
RewriteEngine On

# 管理者のIP以外はwp-adminへのアクセスを拒否
RewriteCond %{REQUEST_URI} ^/wp-admin/ [NC]
RewriteCond %{REMOTE_ADDR} !^203\.0\.113\.1$
RewriteCond %{REMOTE_ADDR} !^198\.51\.100\. [NC]
RewriteRule ^ - [F,L]

# ただし admin-ajax.php は許可(フロントエンドのAJAXに必要)
RewriteCond %{REQUEST_URI} ^/wp-admin/admin-ajax\.php$ [NC]
RewriteRule ^ - [L]
</IfModule>
// functions.php: admin-ajax.php へのアクセスは許可しつつ
// 管理画面ページへのアクセスをチェック
add_action('admin_init', function(): void {
    // ホワイトリストのIPアドレス
    $allowed_ips = [
        '203.0.113.1',
        '198.51.100.0/24',
    ];

    $current_ip = $_SERVER['REMOTE_ADDR'] ?? '';

    // AJAX リクエストは除外
    if (wp_doing_ajax()) return;

    $is_allowed = false;
    foreach ($allowed_ips as $allowed) {
        if (str_contains($allowed, '/')) {
            // CIDR記法のチェック(簡易版)
            [$subnet, $bits] = explode('/', $allowed);
            if ((ip2long($current_ip) >> (32 - (int)$bits)) ===
                (ip2long($subnet) >> (32 - (int)$bits))) {
                $is_allowed = true;
                break;
            }
        } elseif ($current_ip === $allowed) {
            $is_allowed = true;
            break;
        }
    }

    if (!$is_allowed) {
        wp_die('アクセスが拒否されました。', 403);
    }
});

ステップ5:変更後の動作確認とバックアップ

# 変更後に新しいURLでアクセスできるか確認
curl -I https://example.com/secure-login
# HTTP/2 200 が返ること

# デフォルトURLへのアクセスが拒否されるか確認
curl -I https://example.com/wp-login.php
# HTTP/2 404 または 302 が返ること

# .htaccess のバックアップ
cp /var/www/html/.htaccess /var/www/html/.htaccess.bak

# ロックアウトされた場合の緊急対処(SSH経由)
# WPS Hide Login の設定をリセット
wp option delete whl_page
wp option delete whl_redirect
# → デフォルトの /wp-login.php に戻る

注意事項

  • ログインURLを変更した後は、新しいURLをパスワードマネージャーや安全な場所に必ず記録してください。URLを忘れると管理画面にアクセスできなくなります
  • ロックアウトされた場合は、SSHでサーバーにアクセスし、WP-CLIでwp option delete whl_pageを実行するとデフォルトURLに戻せます
  • パスワードリセットメールのリンクが変更後のURLを使うよう、プラグインが対応しているか確認してください。WPS Hide Loginは自動で対応しています

まとめ

管理画面URL変更は①wp plugin install wps-hide-login --activateで設定 → 管理画面 → 一般でURL変更が最もシンプルな方法です。手動の場合は②.htaccessでカスタムURLからwp-login.phpへ内部転送し、デフォルトURLへの直接アクセスを302/404でブロック、③add_filter('login_url'...)wp_login_url()の返すURLも更新します。変更後は必ず新URLをバックアップし、ロックアウト時のSSH復旧手順を把握しておきます。

お気軽にご相談ください

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