WordPressのセキュリティ強化のためにプラグインを使用せずにログインURLを変更したいんだけどその方法を知りたいです。
こういった悩みにお答えします。
先にお伝えしておきます。
ログインURLの変更に必要となる「.htaccess」の編集はエックスサーバーのファイルマネージャから行っています。
しかし、以下のFTPソフトを使うことで同じことはできますので参考までに下記に記事を貼っておきます。
本記事で解決できること
- ログインURLの変更に必要なキーワードの生成ツールが手に入る。
- .htaccessによるログインURLの変更方法が分かる。
- functions.phpによるログインURLの変更方法が分かる。
是非、最後までご覧ください。
WordPressのログインURLをプラグインなしで変更する方法【.htaccess編】
エックスサーバーの公式サイトにアクセスします。
トップページから、「ログイン」>「ファイルマネージャ」を選択します。
ログインに必要な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://は除きます。
- 手順③:入力を終えた後「編集」をクリックします。
僕は、文字列の生成には下記のツールを使用していますが使い慣れたツールがあればそちらで構いません。
編集画面には下記を入力しました。
- ①〜⑥の文字列には「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の編集画面に移動後、下記のコードを追記します。
# ログイン画面へのURLを変更する
define( 'LOGIN_CHANGE_PAGE', 'wp-login-test.phpなど拡張子がphpの「ファイル名」を入力' );
# オリジナルのログインURL以外は403エラー
if ( ! function_exists( 'login_change_init' ) ) {
function wp_login_url_403_error() {
if ( !defined( 'LOGIN_CHANGE' ) || sha1( '「任意のキーワード」を入力' ) != LOGIN_CHANGE ) {
status_header( 403 );
exit;
}
}
}
add_action( 'login_init', 'wp_login_url_403_error' );
# ログイン済みか新規作成したログインURLの場合はwp-login.phpを置き換える
if ( ! function_exists( 'login_change_site_url' ) ) {
function wp_login_change_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'], 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 );
# ログアウト時のリダイレクト先の設定
if ( ! function_exists( 'login_change_wp_redirect' ) ) {
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 );
下記が追記した画像になります。
追記したコードを編集します。
- wp-login-xxx.phpなど拡張子がphpの「ファイル」を入力の部分に「wp-login-test.php」と入力しました。
- 「任意のキーワード」を入力の部分に「xcU5Lk5AdP8n」と入力しました。
※「任意のキーワード」も「.htaccess編」で紹介したツールで生成しました。
※「任意のキーワード」に半角英数字が使えることは確認済みですが記号が使えるかは不明です🙇♂️
次は、新規ログイン用ファイルを作成します。
エックスサーバーの公式サイトにアクセスします。
トップページから、「ログイン」>「ファイルマネージャ」を選択します。
ログインに必要な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ではログイン画面にアクセスできなくなっています。
最後に管理画面からログインします。
アドミンバーから、「こんにちは、◯◯さん」>「ログアウト」を選択します。
ログアウトできました(下記画像)。
今回は以上です。