#Как проявляется
После ввода логина и пароля страница /wp-login.php загружается снова, без сообщения об ошибке, или браузер сообщает «Слишком много перенаправлений». Данные верны, но сессия не устанавливается. Причины: неверные значения Адрес WordPress и Адрес сайта (с www или без, http или https), повреждённые cookies, плагин безопасности или кэширования, неверный .htaccess, смещение времени сервера, ошибка в wp-config.php или за прокси (Cloudflare) не передаётся протокол HTTPS. Эта ошибка отличается от общей петли HTTPS: здесь проблема именно в аутентификации и cookies.
#Причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Разные адреса сайтаhttp/https, www. | Петля при входе. | Выровняйте WP_HOME и WP_SITEURL. |
| Повреждённые cookiesСтарые данные. | В инкогнито работает. | Очистите cookies. |
| Плагин безопасности или кэшаКонфликт. | Без плагинов работает. | Найдите по очереди. |
| Неверный .htaccessПравила. | Петля перенаправлений. | Восстановите стандартный. |
| Неверное время сервераСмещение. | Сессия сразу истекает. | Настройте NTP. |
| Прокси не передаёт HTTPSCloudflare. | Петля на https. | Блок X-Forwarded-Proto. |
#Порядок
- Очистите cookies для вашего сайта и попробуйте в режиме инкогнитоОткройте страницу входа сайта в приватном окне браузера; если там вход работает, вероятна проблема с сохранёнными cookies. В Chrome откройте страницу сайта → значок настройки сайта слева от адреса → «Файлы cookie и данные сайта»/«Данные сайта» (название зависит от версии) и удалите данные только этого домена. Это завершит сеансы на нём. Затем заново откройте
/wp-login.phpи повторите вход; если проблема остаётся в приватном окне, переходите к настройке сайта. - Сравните адреса сайта и WordPress с адресом в браузереВ кабинете WordPress, если доступен, перейдите «Настройки → Общие» и сравните поля «Адрес WordPress (URL)» и «Адрес сайта (URL)» с адресом в браузере: особенно схему
httpsи вариант сwww. Если в панель не войти, администратор может прочитать настройки из базы через WP-CLIwp option get homeиwp option get siteurlв корне сайта. Не меняйте адреса, пока не проверены DNS, TLS и правила перенаправления. - Задайте адреса в wp-config.php для принудительной проверкиСохраните копию
wp-config.phpв корневой папке WordPress и откройте редактор файлов панели хостинга. Если значения в базе неверны и доступ в админку закрыт, временно добавьте корректныеWP_HOMEиWP_SITEURLс реальным доменом до строки «That’s all, stop editing!». В кодовом блоке ниже — образец,example.ruнадо заменить. Проверьте вход; при ошибке верните резервную копию файла. - Отключите все плагины, переименовав папку wp-content/pluginsЕсли подозрение на конфликт плагина остаётся, откройте файловый менеджер хостинга →
wp-content, переименуйтеpluginsвplugins.offи попробуйте открыть/wp-login.phpв приватном окне. Эта операция временно отключает все плагины и может нарушить формы, оплату и защиту сайта. Если вход появился, верните имя папки и деактивируйте плагины по одному из административного интерфейса; при неуспехе просто верните исходное имя. - Верните стандартный .htaccessПроверьте в корне сайта
.htaccessтолько если запросы обслуживаются Apache. Скопируйте текущий файл, затем сравните блок между# BEGIN WordPressи# END WordPressсо штатной конфигурацией для вашего режима размещения. Не стирайте чужие правила безопасности и перенаправлений. После согласованного изменения откройте/wp-login.php; на Nginx.htaccessне применяется — исправления нужны в конфигурации Nginx. - Проверьте, что кэширование не применяется к wp-login.php и wp-adminОткройте настройки кэша в используемом плагине WordPress, панели хостинга и внешней сети доставки содержимого. Убедитесь, что
/wp-admin/,/wp-login.phpи страницы авторизации не отдаются из общего кэша и что cookies не удаляются правилами прокси. Сохраните нынешние исключения, добавьте точечные правила по документации конкретного продукта, очистите только кэш сайта и повторите вход. - Проверьте дату и время на сервереВ терминале сервера выполните
timedatectl status(Linux с systemd): проверьте текущие дату, время и синхронизацию. На устройстве пользователя тоже проверьте часы и часовой пояс. Если системное время расходится, администратор должен исправить настройку NTP на своём сервере; ручную установку времени на продуктивной машине без оценки последствий не применяйте. После исправления перезапустите браузер. - Если сайт за Cloudflare или прокси, добавьте определение HTTPSЕсли HTTPS завершается на обратном прокси, проверьте по журналу, что до PHP корректно доходит информация о схеме запроса. Для доверенного прокси можно настроить обработку
HTTP_X_FORWARDED_PROTOвwp-config.phpпо приведённому примеру, но нельзя безусловно доверять заголовку, присланному напрямую из интернета. Прежде сравните правила прокси иis_ssl(); сделайте копию файла, измените, проверьте вход и при новой петле отмените правку. - Проверьте права на файлы и свободное местоЧерез панель хостинга проверьте, не заполнен ли диск: метрики «Диск» и «inode». Затем откройте свойства
wp-config.phpи каталогаwp-content, убедитесь, что веб-сервер может читать конфигурацию и записывать файлы сеансов/кэша в разрешённые каталоги. Не ставьте777и не меняйте владельца всех файлов рекурсивно; точные права зависят от пользователя PHP-FPM. После исправления проверьте журнал PHP. - Обновите постоянные ссылкиЕсли уже удалось войти, откройте «Настройки → Постоянные ссылки», ничего не меняйте и нажмите «Сохранить изменения» для обновления правил WordPress, если это действительно нужно. Затем проверьте главную,
/wp-admin/и/wp-login.php. Этот шаг редко исправляет петлю входа; если редирект сохраняется, смотрите последовательность заголовковLocationв инструментах разработчика браузера или с помощьюcurl -ILи ищите конфликтующие правила. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Если вы всё равно не можете войти
Войдите в phpMyAdmin и проверьте таблицу wp_options: значения siteurl и home должны совпадать с адресом, по которому вы открываете сайт. Исправьте их и очистите кэш. Сброс пароля выполняется командой wp user update 1 --user_pass=НовыйПароль или в phpMyAdmin заменой хеша в таблице wp_users (функция MD5 для совместимости).