Стандартный файл wp-login.php в WordPress — это точка входа для авторизации пользователей. Часто возникает задача убрать или изменить этот URL для повышения безопасности сайта — чтобы снизить риск автоматических атак или просто скрыть стандартную страницу входа. Но многие методы основаны на перенаправлении (редиректе) с wp-login.php на другой URL, что не всегда удобно и может вызывать проблемы с плагинами и производительностью.
Почему нужно удалять или менять wp-login.php без редиректа
Редиректы с wp-login.php на кастомный URL зачастую приводят к:
- Увеличению времени загрузки страницы входа;
- Проблемам с кэшированием и SEO;
- Конфликтам с другими плагинами, которые обращаются к
wp-login.phpнапрямую; - Сложностям при отладке и поддержке сайта.
Идеальный способ — полностью убрать публичный доступ к wp-login.php, заменив его функционал на кастомный, либо полностью запретить доступ к стандартному URL без перенаправлений.
Как полностью отключить доступ к wp-login.php
Самый простой технический способ — запретить доступ к wp-login.php через сервер (например, в .htaccess для Apache или в конфигурации nginx). Это эффективно, но не всегда удобно, если у вас несколько администраторов или внешних сервисов.
Пример для Apache — запрет доступа ко всем, кроме определённого IP:
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 123.456.789.0
</Files>
Для nginx можно использовать локацию с условием по IP:
location = /wp-login.php {
allow 123.456.789.0;
deny all;
fastcgi_pass php-fpm;
include fastcgi_params;
}
Такой способ полностью блокирует доступ к странице входа с нежелательных IP, без редиректов.
Создание кастомной страницы входа без использования wp-login.php
Другой подход — разработать собственную страницу входа, обрабатывающую авторизацию, и полностью отключить wp-login.php. Это требует немного больше работы, но даёт полный контроль над процессом.
Основные шаги:
- Создайте новый PHP-файл в корне темы или плагина, например,
custom-login.php; - Добавьте форму входа с полями
usernameиpassword; - Обработайте отправку формы с помощью функции
wp_signon; - При успешном входе перенаправьте пользователя в админку или на нужную страницу;
- Отключите доступ к
wp-login.phpчерез сервер или фильтры WordPress.
Пример простейшего кастомного файла входа — wplogin_custom_login_form():
<?php
/*
Template Name: Custom Login
*/
if ( is_user_logged_in() ) {
wp_redirect( admin_url() );
exit;
}
$error = '';
if ( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
$creds = array(
'user_login' => $_POST['username'],
'user_password' => $_POST['password'],
'remember' => isset($_POST['remember']),
);
$user = wp_signon( $creds, false );
if ( is_wp_error($user) ) {
$error = $user->get_error_message();
} else {
wp_redirect( admin_url() );
exit;
}
}
get_header();
?>
<form method="post" action="">
<label>Логин</label>
<input type="text" name="username" required />
<label>Пароль</label>
<input type="password" name="password" required />
<label>Запомнить меня</label>
<input type="checkbox" name="remember" />
<button type="submit">Войти</button>
<div style="color:red;"><?php echo esc_html($error); ?></div>
</form>
<?php
get_footer();
Создайте страницу в админке и выберите для неё шаблон Custom Login, чтобы использовать эту форму.
Отключение стандартного wp-login.php через фильтры WordPress
Чтобы полностью исключить возможность доступа к wp-login.php со стороны пользователей, можно использовать фильтр login_url и хук login_init для блокировки.
Пример функции wplogin_disable_wp_login():
function wplogin_disable_wp_login() {
if ( strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false ) {
wp_redirect( home_url() );
exit;
}
}
add_action( 'login_init', 'wplogin_disable_wp_login' );
function wplogin_custom_login_url() {
return home_url('/custom-login/'); // URL вашей кастомной страницы входа
}
add_filter( 'login_url', 'wplogin_custom_login_url' );
Таким образом, попытки попасть на стандартный wp-login.php будут перенаправляться на вашу кастомную страницу без использования редиректа с самого wp-login.php.
Использование плагинов для изменения точки входа без редиректов
Если вы не хотите писать код, можно использовать готовые плагины, которые работают без редиректов, например:
- Clearfy Pro — позволяет скрыть wp-login.php и отключить его работу;
- WPRemark — дополнительно защищает авторизацию и меняет URL входа;
- My Popup — можно сделать кастомное окно входа без перехода на wp-login.php.
Эти решения позволяют быстро и безопасно убрать стандартный вход, сохранив полный контроль над процессом авторизации.
Итоги и рекомендации
Удаление или изменение wp-login.php без редиректа — задача, требующая аккуратного подхода. Лучший способ — создать собственную страницу входа и запретить доступ к стандартной точке входа на уровне сервера или через хуки WordPress. Это обеспечит безопасность, стабильность и удобство поддержки сайта.
Используйте приведённые примеры кода и рассмотрите плагины из каталога WPSHOP для упрощения задачи.