WordPressのログインページ(/wp-login.phpや/wp-admin)は、URLが公開されているため、不正ログインのリスクがあります。
ログインページのURLを変更できるプラグインもありますが、
「プラグインを増やしたくない」
「プラグインが使えない、うまく機能しない」
「コードで管理したい、カスタマイズしたい」
といった場合もあるでしょう。
そこで今回は、プラグインを使わずにログインページを独自URLに変更する方法をご紹介します。
コードはそのままコピペ可能で、あなたのサイトでもすぐご活用いただけます。
目次
独自のログインページをつくる手順
プラグイン無しでWordPressのログインページをつくる手順は、次の3ステップです。
- 独自URLのログインページを作成
- 公開URL(デフォルトログインページ)へのアクセス制限
- .htaccessでサーバー側からもアクセス制限
ひとつずつ見ていけば、複雑なことはありませんし、基本的にはコピペで済みます。
1. 独自URLのログインページを作成
まずは、独自URLのログインページをつくります。
以下をお手元のテキストエディタにコピペして、「任意のURL.php」という形で保存してください。ここで決めたファイル名がそのままログインページのURLになります。
/**
 * /login.php
 * WP標準ログインを独自URLで表示
 */
require_once __DIR__ . '/wp-load.php';
// 既にログイン済みなら管理画面へ
if (is_user_logged_in()) {
    wp_redirect(admin_url());
    exit;
}
// wp-login.php に直接アクセスされた場合はトップにリダイレクト
// ただし、ログインフォーム送信時は例外
if (isset($_SERVER['REQUEST_URI']) && basename($_SERVER['REQUEST_URI']) === 'wp-login.php') {
    if (empty($_POST['log'])) {
        wp_redirect(home_url('/'));
        exit;
    }
}
// 標準ログインページを読み込む
require_once ABSPATH . 'wp-login.php';
2. 公開URL(デフォルトログインページ)へのアクセス制限
次に行うのは、公開URLへのアクセス制限です。以下の2つのURLへのアクセスを制限します。
- /wp-login.php
- /wp-admin
今回は、それぞれトップページにリダイレクトさせる書き方です。上記URLにアクセスしても、ログインページの代わりにトップページが表示されるようになります。
テーマのfunctions.phpを直接編集するのではなく、プラグイン「Code Snippets」をお使いいただくのが便利で安心です。下記をコピペして使えます。
// wp-admin に未ログインアクセスした場合はトップへリダイレクト
add_action('admin_init', function() {
    if (!is_user_logged_in()) {
        wp_redirect(home_url('/'));
        exit;
    }
});
// wp-login.php への直接アクセスを遮断(ログアウト・モーダル・再認証は例外)
add_action('login_init', function() {
    $request = $_SERVER['REQUEST_URI'] ?? '';
    // 各種例外処理
    $is_logout  = isset($_GET['action']) && $_GET['action'] === 'logout';
    $is_interim = isset($_GET['interim-login']) && $_GET['interim-login'] == 1; // モーダルログイン
    $is_reauth  = isset($_GET['action']) && $_GET['action'] === 'reauth';       // 再認証
    $has_post   = !empty($_POST['log']); // POST送信(ログインフォーム送信時)
    // 独自ログインページ(例:login.php)以外からのアクセスを遮断(例外を除く)
    if (
        strpos($request, 'wp-login.php') !== false
        && basename($request) !== 'login.php'
        && ! $is_logout
        && ! $is_interim
        && ! $is_reauth
        && ! $has_post
    ) {
        wp_redirect(home_url('/'));
        exit;
    }
});
3. .htaccessでサーバー側からもアクセス制限
最後に、非ログインユーザーが、/wp-adminに直接アクセスできないようサーバー側で制御します。
下記記述を、.htaccessの一番上にコピペしてください。.htaccessは、非常に重要なファイルなので、必ずバックアップしてから行ってください。
サーバーファイルを編集するのが不安な方は、こんなプラグインもありますので、ぜひお試しください。
 
    
    WordPressサイトのリダイレクトやアクセス制限などが行える「.htaccess」。サーバー上に配置される重要な設定ファイルです。 編集するには、サーバーにFTPでアクセスする必要があります。 ただ、サーバーID・パスワードを入力してログインしたり、ファイルをダウンロードするのは少し...
# BEGIN Custom Admin Restriction
RewriteEngine On
# /wp-admin への未ログインアクセスをトップにリダイレクト(Cookie判定)
RewriteCond %{REQUEST_URI} ^/wp-admin [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$ [NC]
RewriteRule ^.*$ / [R=302,L]
 
# END Custom Admin Restriction
設定後は挙動を確認しよう
編集を加えた後は、必ずサイトの挙動を確認しましょう。今回の場合、確認すべきは以下3点です。
- 設定したURLにアクセスしたときのみ、ログインページが表示されるか
- /wp-login.phpや/wp-adminにアクセスすると、トップページにリダイレクトされるか
- 正常にログインできた場合、ログアウトも可能か
複数人運営のサイトなら、できるだけ複数人で確認しておくのがおすすめです。
まとめ
プラグインを使わずに、WordPressのログインページを独自URLに変更する方法をご紹介しました。
公開URL(/wp-login.phpや/wp-admin)を保護できるので、不正ログイン対策に有効です。プラグインを使う対策が一般的ですが、PHPと.htaccessを少し編集するだけで実現できます。
プラグインを増やしたくない方や、PHPやファイルのカスタマイズに挑戦したい方は、ぜひ参考にしてみてください。
あわせて読みたい関連記事
 
    
    プラグインは、WordPressのカスタマイズやコーディングの知識がなくても、欲しい機能をサイトに簡単に導入することができる優れものです。 ですが、プラグインをインストールしすぎるのも良いことではありません。この記事では、プラグインをたくさん入れすぎるべきではない理由と、プラグインの数を減らす...
 
    
    WordPressサイトのバックアップは、プラグインを使えばかんたんに行えます。 今回はあえて、プラグインを使わずに手動でバックアップを取る方法をご紹介します。バックアップの仕組みを理解すれば、トラブル時の対応も落ち着いて行えます。 それでは早速見ていきましょう。 ...
WordPressテーマ集
 
       
      
      
      
      
      
      
      
      
      
      
      
      
       
       
       
       
       
       
       
       
    
 
    



 
     


 
       
       
       
       
       
      

 
    
    
    
    
    
    
    
    
    
    
    
    
    
   
 
   
   
   
  
コメント