Чужой опыт экономит время и увеличивает шансы для удачи

Как закрыть доступ к папке "wp-admin" в WordPress

Есть много советов как обезопасить WordPress. В числе прочих - изменить адрес формы логина и папку "wp-admin" админ панели. Но большинство предлагаемых решений мне не понравились. Я попробовал все что нашел и решил сделать все по-своему. Админ панель (wp-admin) обезопасил через редирект в .htaccess на протокол httpS (порт 443) недоступный снаружи без пароля. И форму логина тогда можно было уже не переименовывать.

Но есть в этом решении одна важная деталь. Адрес необходимый для работы Ajax содержит так же папку "wp-admin", и его надо оставить открытым, исключить из перенаправления. Для этого нужно в .htaccess добавить одно дополнительное правило.

При этом адрес формы ввода логина и пароля я все-же оставил измененным. Потому что не исключено что когда-нибудь в будущем ситуация может измениться и перенаправление для папки "wp-admin" админ панели может быть придется все-же убрать.

Изменения .htaccess для перенаправления wp-admin на https

Суть изменений в том что сайт всем доступен на порту 80 (т.е. стандартный http), но при попытке зайти по адресу админ панели "wp-admin", происходит перенаправление на https (443 порт), исключая адрес для ajax-запросов. Это само по-себе полезно, но в некоторых ситуациях https можно закрыть паролем (тогда доступна снаружи будет только http версия сайта). Хотя сейчас http уже вообще считается нежелательным и в будущем возможно эта идея будет не актуальна.

Тем не менее - что нужно изменить в файле
.htacess

<IfModule mod_rewrite.c>

    RewriteEngine On

    RewriteBase /

...

    RewriteCond %{HTTP_HOST} ^САЙТ\.com$ [NC]

    RewriteCond %{HTTPS} =off

    RewriteCond %{REQUEST_URI} !^/wp-admin/admin-ajax.php

    RewriteRule ^wp-admin(.*)$ https://САЙТ.com/wp-admin$1 [R=301,L]

</IfModule>

ВАЖНО! Слово "САЙТ" - нужно заменить на доменное имя своего сайта.
Во многих примерах используют слеш в имени папки в последней строке (экранированный "/RewriteRule ^/wp-admin/..."), но у меня работает так (и только так) как указанно выше.

В той ситуации с которой я столкнулся доступ на сайт по http (80 порт) открыт, а по httpS (443 порт) - закрыт паролем.
Но даже если без этого - приведенный выше пример может пригодиться для других целей. Правила обязательного перенаправления на httpS только для одной папки сайта (здесь "wp-admin"), но исключая один адрес в ней (например для Ajax-запросов) может быть полезны просто в качестве примера.

Проверка

Нужно выйти из админки (разлогинится). После этого попытаться ввести адрес "http://_сайт_/wp-admin/". Если все сделано правильно, то редирект на httpS должен произойти до того как сработает стандартный редирект на форму логина. Если выбрасывает на "http://_сайт_/wp-login.php" (или свою форму логина), то редирект .htaccess не работает. Потому что он должен срабатывать раньше и сначала перебрасывать на "httpS://_сайт_/wp-admin/..."

КСТАТИ! Если страница админки не существует то редирект не сработает! Будет показана стандартная 404.

Форма логина - изменяем имя с wp-login.php на свое

Это здесь просто в качестве дополнения, поскольку уже не относится к основной теме. Адрес формы логина обычно меняют чтобы отсечь нагрузку на сервер от ботов. На самом деле это слишком просто, поэтому я и решил упомянуть здесь об этом тоже.

Итак.
Нужно переименовать файл "wp-login.php" на "_свое_имя_.php" и сделать замену в коде в двух местах:
1. В самом файле "_свое_имя_.php" - заменить везде где там встретится "wp-login.php" на новое имя.
2. Сделать такую-же замену в файле ".../wp-includes/general-template.php"

ВАЖНО! После обновления движка эту операцию придется повторить.

Рекламные ссылки:

Вопросы по теме статьи (просьба - без личностей), - присутствует премодерация:
   - регистрироваться НЕ обязательно! -

Комментарий будет опубликован только после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)