WordPressのセキュリティ強化のためにプラグインを使用せずにログインURLを変更する方法を教えてほしいです。
こういった悩みにお答えします。
先にお伝えしておきます。
ログインURLの変更に必要となる「.htaccess」の編集はエックスサーバーのファイルマネージャから行っています。
しかし、以下のFTPソフトを使うことで同じことはできますので参考までに下記に記事を貼っておきます。
あわせて読みたい
【FTPソフト】「FileZilla」の使い方を初心者向けに解説
【FTPソフト】FileZillaの使い方を知りたいですか?本記事では、FTPとは?からFileZillaのダウンロード方法、FileZillaの使い方(アップロード・ダウンロード)、FileZillaを起動してサーバーに接続する度に発生するパスワードを入力する手間の解決方法、ファイルを編集するテキストエディタの設定方法まで解説しています。【FTPソフト】FileZillaの使い方を知りたい方は非是ご覧ください。
- ログインURLの変更に必要なキーワードの生成ツールが手に入る
- .htaccessによるログインURLの変更方法が分かる
- functions.phpによるログインURLの変更方法が分かる
本記事の内容
WordPressのログインURLをプラグインなしで変更する方法【.htaccess編】
エックスサーバーの公式サイトにアクセスします。
≫ XServer
トップページから、「ログイン」>「ファイルマネージャ」を選択します。
ログインに必要なFTP情報を入力し「ログインする」をクリックします。
ファイルマネージャにログインしました。
ここから「.htaccess」のある場所まで移動します。
移動は、「(ログインURLを変更したい)サイトドメイン」>「public_html」です。
「.htaccess」のある場所まで移動しました。
.htaccessを選択し「編集」をクリックします。
「.htaccess」の編集画面が開きました。
編集画面にログインURLの変更に必要なコードを追記します。
※追記する場所は最上下部か、常時SSL化コードを最上部に記載している場合はその下からが良いと思います。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^enter/?$ /wp-login.php?①「任意の文字列」を入力 [R,L]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^dashboard/?$ /wp-login.php?②「任意の文字列」を入力&redirect_to=/wp-admin/ [R,L]
RewriteRule ^dashboard/?$ /wp-admin/?③「任意の文字列」を入力 [R,L]
RewriteRule ^register/?$ /wp-login.php?④「任意の文字列」を入力&action=register [R,L]
RewriteCond %{SCRIPT_FILENAME} !^(.*)admin-ajax\.php
RewriteCond %{HTTP_REFERER} !^(.*)❶「サイトドメイン」を入力/wp-admin
RewriteCond %{HTTP_REFERER} !^(.*)❷「サイトドメイン」を入力/wp-login\.php
RewriteCond %{HTTP_REFERER} !^(.*)❸「サイトドメイン」を入力/enter
RewriteCond %{HTTP_REFERER} !^(.*)❹「サイトドメイン」を入力/dashboard
RewriteCond %{HTTP_REFERER} !^(.*)❺「サイトドメイン」を入力/register
RewriteCond %{QUERY_STRING} !^⑤「任意の文字列」を入力
RewriteCond %{QUERY_STRING} !^action=logout
RewriteCond %{QUERY_STRING} !^action=rp
RewriteCond %{QUERY_STRING} !^action=register
RewriteCond %{QUERY_STRING} !^action=postpass
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
RewriteRule ^.*wp-admin/?|^.*wp-login\.php /not_found [R,L]
RewriteCond %{QUERY_STRING} ^loggedout=true
RewriteRule ^.*$ /wp-login.php?⑥「任意の文字列」を入力 [R,L]
</IfModule>
下記がコードを追記した画像です。
追記したコードを編集します。
- 手順①:①〜⑥に「任意の文字列」を入力します。 ※全て同じ文字列を入力します。
- 手順②:❶〜❺に「サイトドメイン」を入力します。 ※https://は除きます。
- 手順③:入力を終えた後「編集」をクリックします。
僕は、文字列の生成には下記のツールを使用していますが使い慣れたツールがあればそちらで構いません。
ラッコツールズ
パスワード生成:ランダムパスワード簡単に大量生成 | ラッコツールズ🔧
アクセスした瞬間に100個のパスワード生成を行います。文字数・文字種(英字大文字、英字小文字、数字、記号)を選択することで好みのランダムパスワードを自動生成できま…
編集画面には下記を入力しました。
- ①〜⑥の文字列には「xcU5Lk5AdP8n」を入力しました。
- ❶〜❺には、僕のサイトドメインである「hrdyuic.com」を入力しました。
「任意の文字列」に半角英数字が使えることは確認済みですが記号が使えるかは不明です。
下記が文字列やサイトドメインを入力した画像です。
これでログインURLを変更する準備が整いました。
では、ログインURLが変更できているか確認します。
アドレスバーに変更したログインURLを入力します。
入力内容は、「サイトドメイン/wp-login.php?任意のキーワード」なので、今回であれば「hrdyuic.com/wp-login.php?xcU5Lk5AdP8n」です。
ログイン画面に移動できました。
アドレスバーに変更前のログインURLを入力します。
入力内容は、「サイトドメイン/wp-login.php」です。
すると、下記の画面(404エラー)が表示されます。
変更する前のログインURLではログインできません。
管理画面からログアウトします。
ログイン画面に戻ります。 ※アドレスバーには変更したURLが表示されています。
次は、functions.phpでログインURLを変更する方法を解説します。
WordPressのログインURLをプラグインなしで変更する方法【functions.php編】
管理画面メニューから、「外観」>「テーマファイルエディター」を選択します。
テーマファイルエディターに移動しました。
編集するテーマを選択からは使用中のテーマの「子テーマ」を選択、テーマファイルからは「functions.php」を選択します。
functions.phpの編集画面に移動後、下記のコードを追記します。
// カスタムログインページの定義
define('LOGIN_CHANGE_PAGE', '拡張子がphpのファイル名(例:wp-login-test.php)を入力');
// 403エラーを返すための関数
if (!function_exists('wp_login_url_403_error')) {
function wp_login_url_403_error() {
// LOGIN_CHANGEを定義し、これが正しい場合403エラーは回避
if (!defined('LOGIN_CHANGE') || sha1('任意のキーワードを入力') != LOGIN_CHANGE) {
status_header(403);
exit;
}
}
}
add_action('login_init', 'wp_login_url_403_error');
// 新しいURLに基づいてサイトURLを変更
if (!function_exists('wp_login_change_site_url')) {
function wp_login_change_site_url($url, $path, $orig_scheme, $blog_id) {
if ((strpos($path, 'wp-login.php') !== false) &&
(is_user_logged_in() || strpos($_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE) !== false)) {
$url = str_replace('wp-login.php', LOGIN_CHANGE_PAGE, $url);
}
return $url;
}
}
add_filter('site_url', 'wp_login_change_site_url', 10, 4);
// ログアウト時のリダイレクトURLを変更する
if (!function_exists('wp_logout_redirect_setting')) {
function wp_logout_redirect_setting($location, $status) {
if (strpos($_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE) !== false) {
$location = str_replace('wp-login.php', LOGIN_CHANGE_PAGE, $location);
}
return $location;
}
}
add_filter('wp_redirect', 'wp_logout_redirect_setting', 10, 2);
下記が追記した画像になります。
追記したコードを編集します。
- 拡張子がphpのファイル名(例:wp-login-test.php)を入力の部分に「wp-login-test.php」と入力しました。
- 任意のキーワードを入力の部分に「xcU5Lk5AdP8n」と入力しました。 ※「任意のキーワード」も「.htaccess編」で紹介したツールで生成しました。
※「任意のキーワード」に半角英数字が使えることは確認済みですが記号が使えるかは不明です🙇♂️
次は、新規ログイン用ファイルを作成します。
エックスサーバーの公式サイトにアクセスします。
≫ XServer
トップページから、「ログイン」>「ファイルマネージャ」を選択します。
ログインに必要なFTP情報を入力し「ログインする」をクリックします。
ファイルマネージャにログインしました。
ここから「wp-login.php」がある場所まで移動します。
移動は、「(ログインURLを変更したい)サイトドメイン」>「public_html」です。
wp-login.phpのある場所まで移動しました。
wp-login.phpと同じ場所に新規ログイン用ファイルを作成します。
- 手順①:「新規ファイル」>「wp-login-test.php」を作成します。
- 手順②:「wp-login-test.php」>「編集」を選択します。
この新規ログイン用ファイルをアドレスバーに「サイトドメイン/wp-login-test.php」と入力することでログイン画面に移動します。
wp-login-test.phpの編集画面が開きました。
編集画面に下記のコードをコピペします。
<?php
define( 'LOGIN_CHANGE', sha1( '任意のキーワードを入力' ) );
require_once './wp-login.php';
?>
下記がコピペした画像です。
コピペしたコードを編集します。
- 任意のキーワードを入力にfunctions.phpに入力したものと同じキーワード(xcU5Lk5AdP8n)を入力します。
これで準備が整いましたので新規ログイン用ファイルでログイン画面にアクセスできるか確認していきます。
アドレスバーに変更したログインURLを入力します。
ログイン画面にアクセスできました。
アドレスバーに変更する前のログインURLを入力します。
変更する前のログインURLではログイン画面にアクセスできなくなっています。
最後に管理画面からログインします。
アドミンバーから、「こんにちは、◯◯さん」>「ログアウト」を選択します。
ログアウトできました(下記画像)。
今回は以上です。