WordPressのログインページのアドレスを変える

通常、WordPressをインストールしたディレクトリの下に「wp-login.php」をつけたものがログイン画面のアドレスになります。

 

例) http://●●●.com/wp-login.php

 

これは管理画面をカスタマイズしない限り、どんなサイトも共通になる為、誰でも他の誰かのサイトのログイン画面を表示する事が出来ます。

ログイン画面が見れたところで、ユーザー名・パスワード名がわからなければログインできませんが、ユーザー名はうっかりさんのサイトでは普通に表示されてしまっていますし、パスワードを何らかの方法で入手した悪意の第三者に乗っ取られたり悪さをされる可能性もあります。

 

そこで今回は、ログインページのアドレスを「wp-login.php」ではないものに変更する方法についてです。

 


 

ログインページのデザインを変える

ログイン画面のロゴと、ロゴのリンク先、ボタンの色をプラグインを使わずに好みのデザインに変更する事も出来ます。

 

↓ サンプル

 

 

これらのカスタマイズは以下をご覧ください。

WordPressのログインページデザインを変える コピペで可
今回はログイン画面のロゴと、ロゴのリンク先、ボタンの色をプラグインを使わずに変える方法を解説します。 ワードプレスのロゴを自サイトロゴに変えたり、背景色を付けたりすることも出来ます。 ログインアドレスを変更するカスタマイズは以下をご覧くださ...

 

今回この記事でご紹介するログインページを独自に作成した場合も、「wp-login.php」を読み込むので、上記のカスタマイズは有効です。

 

ログインアドレスを変える

手順

  1. ログイン画面用PHPファイル作成
  2. サーバーへアップロード
  3. function.phpに追記

 

手順はシンプルですが、PHPファイルの編集、function.phpへの追記、サーバーへのアップロードが必要なのでバックアップを取るなど必要な対応をし、自己責任で行って下さい。

 

参考にしたサイト
https://elearn.jp/wpman/column/c20121118_01.html

ログインページ用のPHPファイルを用意

方法1:任意の名称のPHPファイルをログイン画面アドレスにする

新しいファイルを作成。名称は任意ですが、文字数が長いか他人に分かりにくいものがいいかと思います。

作成したPHPファイル内に以下を記述して保存します。

内容は、このファイルから「wp-login.php」を読み込むだけです。

<?php
define( 'ANYWHERE_LOGIN', sha1( 'keyword' ) );
require_once './wp-login.php';
?>
keyword の部分は任意のものに変更して下さい。(なんでも可)

 

ここで作成したファイル名(PHP)がログイン画面のURLになるので

ファイル名が「anywhere-login.php」であれば以下のようになります。

例) http://●●●.com/anywhere-login.php

 

 

方法2:ディレクトリ名をログインアドレスにする

これをディレクトリを一つ作ってその中に、上記の通り作成したPHPファイルを入れる場合は「index.php」とすれば、アドレスはディレクトリ名でOKになりスマートです。

せっかくディレクトリにするので、ディレクトリ名は単純な名称より、他人に推測されづらい名前がいいです。

 

ここで作成したディレクトリ名がログイン画面のURLになるので

ディレクトリ名が「anywhere-login」であれば以下のようになります。

例) http://●●●.com/anywhere-login/

 

サーバーへアップロード

wp-contentディレクトリなどがあるワードプレスをインストールした場所と同じ場所へアップロードします。

PHPファイル単体の場合もディレクトリへ入れた場合も同じです。

 

サーバーアップロードについて不明な方は以下を参考にして下さい。

図解!SFTP接続で安全にファイル転送する方法「FileZilla」エックスサーバーの例
サーバーへのファイル転送 FTPは危険 FTPとは、File Transfer Protocol(ファイル・トランスファー・プロトコル)の略。 「ファイル転送プロトコル」ですが、「FTP」は、30年以上前から使われている古い通信方式で、セキ...

 

 

function.phpに追記

テーマのfunction.phpに以下を追記します。

define( 'ANYWHERE_LOGIN_PAGE', 'anywhere-login.php' );
add_action( 'login_init', 'anywhere_login_init' );
add_filter( 'site_url', 'anywhere_login_site_url', 10, 4 );
add_filter( 'wp_redirect', 'anywhere_login_wp_redirect', 10, 2 );
if ( ! function_exists( 'anywhere_login_init' ) ) {
 function anywhere_login_init() {
  if ( !defined( 'ANYWHERE_LOGIN' ) || sha1( 'keyword' ) != ANYWHERE_LOGIN ) {
   status_header( 403 );
   exit;
  }
 }
}
if ( ! function_exists( 'anywhere_login_site_url' ) ) {
 function anywhere_login_site_url( $url, $path, $orig_scheme, $blog_id ) {
  if ( ( $path == 'wp-login.php' || preg_match( '/wp-login.php?action=w+/', $path ) ) &&
   ( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], ANYWHERE_LOGIN_PAGE ) !== false ) )
   $url = str_replace( 'wp-login.php', ANYWHERE_LOGIN_PAGE, $url );
  return $url;
 }
}
if ( ! function_exists( 'anywhere_login_wp_redirect' ) ) {
 function anywhere_login_wp_redirect( $location, $status ) {
  if ( strpos( $_SERVER['REQUEST_URI'], ANYWHERE_LOGIN_PAGE ) !== false )
   $location = str_replace( 'wp-login.php', ANYWHERE_LOGIN_PAGE, $location );
  return $location;
 }
}

 

keyword は上記で作成したログインページ用PHPファイルに記述したものと同じものを指定します。

ディレクトリに入れた方法の場合は、1行目ののPHPファイル名を指定している以下の最後の部分を

define( 'ANYWHERE_LOGIN_PAGE', 'anywhere-login.php' ); 

ディレクトリ名に変更して下さい。

define( 'ANYWHERE_LOGIN_PAGE', 'anywhere-login' ); 

 

今回作成したログインページ以外のアドレスを無効にするため、403エラーを出すよう処理しています。

 

注意事項としては、参考にさせて頂いたサイトにも記載されていますが、以下です。

制限としては、未ログイン状態でwp-adminディレクトリ以下のページにアクセスした際にログインページにリダイレクトするのだが、これについては新設したログインページが露出しないようwp-login.phpのままにしている(つまり、403エラーになる)。この点はご理解ください。

 

以上です。

 

綾糸: 綾糸 主婦 1990年代、汎用機時代のエンジニア 趣味で長くやっていたweb制作は、未だにエディタでの手コーティング 現在は自宅でゆるりとweb制作やライターをしています