Проблема:
В логе сайта видим
http://мойсайт.ru/?author=1 // и WordPress открывает страницу с адресом http://мойсайт.ru/author/username/
Для злоумышленника это возможность узнать имя пользователя username для подбора пароля и несанкционированного входа в админку сайта.
Что делать?
Вариант 1: Постоянный редирект для одного пользователя
Если на сайте нет других пользователей, просмотр архива записей конкретного пользователя-автора не имеет смысла, т.к. блог единственного автора совпадает с блогом сайта, и это просто дублирование контента.
Тогда почему бы не использовать постоянный редирект для конкретного пользователя?
Постоянный редирект в общем виде:
Redirect 301 /old-page.html http://www.yourwebsite.com/new-page.html
!!! это работает:
# Постоянный редирект со страницы архива автора username на блог сайта Redirect 301 /author/username/ http://мойсайт.ru/blog/
Но лучше использовать универсальное решение, без указания конкретного username
Вариант 2: Постоянный редирект с параметром
В общем виде:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^oldparam=value$
RewriteRule ^page\.html$ http://www.yourwebsite.com/new-page.html?newparam=newvalue [L,R=301]
Директива RewriteCond используется в модуле mod_rewrite сервера Apache, который выполняет URL-преобразования на лету. Переменная %{QUERY_STRING} задает условие - строку запроса в URI после знака вопроса.
В исходном url-адресе есть параметр author:
http://мойсайт.ru/?author=1
# Постоянный редирект на блог сайта для url с параметром author=число
RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=\d+$
RewriteRule / http://мойсайт.ru/blog/ [L,R=301]
QUERY_STRING - строка после знака вопроса в url страницы
содержит строку ^author=\d+$
\d+ задает число с любым количеством цифр
Вариант 3: Запрет просмотра страницы с параметром в htaccess -- ошибка 403
RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=\d+$
RewriteRule ^ - [F,L]
RewriteRule ^ - [F,L] означает, что при выполнении заданного условия url не перезаписывается:
[F] доступ запрещён, [L] перезапись url останавливается
При попытке зайти на страницу в адресе которой есть /?author=1 (или другое число), получаем ошибку 403:
Forbidden You don't have permission to access this resource!
*** Пример условия:
пользователь с номером 1 или 20: ^author=(1|20)$
Вариант 4: Блокируем все запросы страниц авторов
В логах сайта видим, что злоумышленник отправляет GET запрос вида /author/username/page/7/
что равнозначно
http://мойсайт.ru/author/username/page/7/
поэтому добавим условие - /author/ в строке URI:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^author=\d+$ [OR]
RewriteCond %{REQUEST_URI} ^/author/
RewriteRule ^ - [F,L]