ログインURLをwp-login.phpから変更しても、URL/loginからリダイレクトされる
WordPressで、パーマリンクをデフォルトから変更している場合、URL/loginからURL/wp-login.phpへリダイレクトする仕組みになっている。またURL/adminとURL/dashboardはURL/wp-admin/へリダイレクトされる。
wp-includes/canonical.phpにある、wp_redirect_admin_locations関数で定義されている。
function wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
return;
$admins = array(
home_url( 'wp-admin', 'relative' ),
home_url( 'dashboard', 'relative' ),
home_url( 'admin', 'relative' ),
site_url( 'dashboard', 'relative' ),
site_url( 'admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
wp_redirect( admin_url() );
exit;
}
$logins = array(
home_url( 'wp-login.php', 'relative' ),
home_url( 'login', 'relative' ),
site_url( 'login', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
wp_redirect( site_url( 'wp-login.php', 'login' ) );
exit;
}
}
add_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
この関数の機能により、管理画面のURLを失念した場合でもアクセスできる。一方で、管理画面やログインURLを隠蔽したい場合、この機能は無効にしたいかもしれない。
URL/loginからのリダイレクトを無効にする方法
この機能を無効にする方法がある。いくつか紹介する。A, B, C のいずれか一つを実行すれば良い。
A. login, admin, dashboard というスラッグで固定ページを作る
B. デフォルトパーマリンクを使用する
wp_redirect_admin_locations関数は、is_404()「ページが存在しない」かつusing_permalinks「パーマリンクをカスタマイズしている」の場合にのみ実行される。なので、あらかじめ固定ページを作る、あるいはパーマリンクをデフォルトにすることにより、この関数を実行しないようにできる。
C. アクションフックを無効にする
template_redirectアクションフックにwp_redirect_admin_locations関数が登録されている。なので、remove_actionを使用してフックを取り除けば良い。
remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
と、テーマのfunctions.php等に記述する事で、意図しないリダイレクトを行わなくすることができる。