Стандартный файл wp-login.php — это классическая точка входа в административную панель WordPress. Его изменение или удаление часто требуется для повышения безопасности сайта, чтобы предотвратить автоматические атаки или брутфорс. Однако большинство решений меняют URL входа через редиректы, которые плохо влияют на производительность и SEO, а также могут приводить к ошибкам при входе. В этой статье рассмотрим, как именно удалить или заменить wp-login.php без использования редиректов, с практическими примерами и кодом.
Почему важно менять wp-login.php без редиректа
Часто для защиты входа в WordPress используют плагины типа WPS Hide Login и подобные, которые просто перенаправляют пользователя с wp-login.php на новый URL. Но это:
- Создаёт дополнительную нагрузку на сервер из-за обработки редиректа.
- Может вызвать проблемы с кешированием страниц, особенно при использовании CDN.
- Увеличивает риск ошибок 404 и снижает удобство для пользователей.
Поэтому задача — полностью исключить обработку wp-login.php и сделать новую точку входа, не прибегая к редиректам.
Как полностью отключить wp-login.php в WordPress
Для отключения доступа по wp-login.php можно воспользоваться хуками WordPress. Мы перехватим запросы к этому файлу и вернём ошибку 404 или 403 без редиректов.
Пример кода отключения доступа
add_action('init', 'wplogin_disable_wp_login');
function wplogin_disable_wp_login() {
if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false) {
wp_die('Доступ к wp-login.php запрещён.', 'Ошибка доступа', ['response' => 403]);
exit;
}
}
Этот код добавляем в файл functions.php вашей темы или в кастомный плагин. При попытке открыть wp-login.php пользователь увидит страницу с ошибкой 403, без редиректа.
Как создать новую точку входа в WordPress без редиректа
Теперь нужно реализовать альтернативный URL для входа, который будет обрабатываться напрямую WordPress без редиректов.
Для этого используем фильтр page_rewrite_rules и подключим свою форму входа.
Пример добавления нового URL для входа
add_action('init', 'wplogin_add_custom_login_rewrite_rule');
function wplogin_add_custom_login_rewrite_rule() {
add_rewrite_rule('^my-login/?$', 'index.php?custom_login=1', 'top');
}
add_filter('query_vars', 'wplogin_add_custom_query_var');
function wplogin_add_custom_query_var($vars) {
$vars[] = 'custom_login';
return $vars;
}
add_action('template_redirect', 'wplogin_custom_login_template');
function wplogin_custom_login_template() {
if (get_query_var('custom_login')) {
// Подключаем кастомную форму входа
wplogin_render_custom_login_form();
exit;
}
}
function wplogin_render_custom_login_form() {
if (is_user_logged_in()) {
wp_redirect(admin_url());
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$creds = [
'user_login' => $_POST['log'] ?? '',
'user_password' => $_POST['pwd'] ?? '',
'remember' => isset($_POST['remember']),
];
$user = wp_signon($creds, false);
if (is_wp_error($user)) {
echo '<p style="color:red;">'.esc_html($user->get_error_message()).'</p>';
} else {
wp_redirect(admin_url());
exit;
}
}
echo '<form method="post" action="">';
echo '<p><label>Логин<br><input type="text" name="log" required></label></p>';
echo '<p><label>Пароль<br><input type="password" name="pwd" required></label></p>';
echo '<p><label><input type="checkbox" name="remember"> Запомнить меня</label></p>';
echo '<p><input type="submit" value="Войти"></p>';
echo '</form>';
}
После добавления этого кода не забудьте обновить постоянные ссылки в админке WordPress (Настройки → Постоянные ссылки) для применения правил.
Использование плагинов с поддержкой изменения URL входа без редиректов
Если хотите более удобное готовое решение, обратите внимание на плагин WPGPT от WPShop. Он позволяет гибко настраивать формы входа и регистрации, в том числе менять URL без редиректов, добавлять защиту через капчу и двухфакторную аутентификацию.
Преимущества использования плагина:
- Простой интерфейс для настройки нового URL входа.
- Встроенная защита от атак на форму входа.
- Возможность кастомизации формы через визуальный редактор.
Дополнительные советы по безопасности при смене URL входа
Кроме удаления wp-login.php и создания новой точки входа без редиректов, рекомендую:
- Использовать SSL для шифрования данных при входе.
- Добавить защиту reCAPTCHA или аналогичные сервисы.
- Ограничивать число попыток входа по IP (например, через плагин Limit Login Attempts).
- Регулярно обновлять WordPress и плагины для устранения уязвимостей.
Такой комплексный подход позволит не только скрыть стандартный вход, но и существенно повысить безопасность сайта.