WPのログインURLを変更する

①ファイル作成(代替ログインURLになる)

ファイル名「login_U4vK9.php」などランダムなファイル名でWPルート直下(wp-login.phpと同等)に配置

中は

<?php

define( 'LOGIN_CHANGE', sha1( 'keyword' ) );

// action=logout でアクセスされた場合は wp-login.php にリダイレクト
if ( isset($_GET['action']) && $_GET['action'] === 'logout' ) {
    wp_redirect( site_url( '/app/wp-login.php?action=logout&_wpnonce=' . wp_create_nonce('log-out') ) );
    exit;
}

// 通常のログイン画面表示
require_once __DIR__ . '/wp-login.php';

?>

②WP内 .htaccessに下記を追記

# wp-login.php へのアクセス制御
# 1. ログアウト処理(action=logout または loggedout=true)は常に許可
RewriteCond %{REQUEST_URI} ^/app/wp-login\.php$
RewriteCond %{QUERY_STRING} (action=logout|loggedout=true)
RewriteRule ^ - [L]

# 2. ログイン中ユーザーには wp-login.php へのアクセスを許可
RewriteCond %{REQUEST_URI} ^/app/wp-login\.php$
RewriteCond %{HTTP_COOKIE} wordpress_logged_in_ [NC]
RewriteRule ^ - [L]

# 3. それ以外の wp-login.php へのアクセスはすべて拒否(ログイン画面の表示防止)
RewriteCond %{REQUEST_URI} ^/app/wp-login\.php$
RewriteRule ^.* - [F,L]

③WP functions.phpに下記を追記

// WordPressの管理画面ログインURLを変更する
define( 'LOGIN_CHANGE_PAGE', 'login_U4vK9.php' );

// 指定以外のログインURLはTOPページへリダイレクト
if ( ! function_exists( 'login_change_init' ) ) {
  function login_change_init() {
    if ( isset( $_GET['action'] ) && $_GET['action'] === 'logout' ) {
      // logoutはリダイレクトさせない
      return;
    }
    if ( !defined( 'LOGIN_CHANGE' ) || sha1( 'keyword' ) != LOGIN_CHANGE ) {
      wp_safe_redirect( home_url() );
      exit;
    }
  }
}

add_action( 'login_init', 'login_change_init' );

// ログイン済みか新設のログインURLの場合はwp-login.phpを置き換える
if ( ! function_exists( 'login_change_site_url' ) ) {
  function login_change_site_url( $url, $path, $orig_scheme, $blog_id ) {
    // logout時は置換しない
    if ( isset( $_GET['action'] ) && $_GET['action'] === 'logout' ) {
      return $url;
    }
  
    if ( $path == 'wp-login.php' &&
      ( 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', 'login_change_site_url', 10, 4 );

// ログアウト時のリダイレクト先の設定
if ( ! function_exists( 'login_change_wp_redirect' ) ) {
  function login_change_wp_redirect( $location, $status ) {
    if ( isset( $_GET['action'] ) && $_GET['action'] === 'logout' ) {
      return $location;
    }
  
    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', 'login_change_wp_redirect', 10, 2 );

以上

タイトルとURLをコピーしました