Довідник помилок / WordPress login redirect loop

Цикл переадресації при вході в WordPress

Цикл переадресації при вході - це коли ви вводите правильні логін і пароль, натискаєте «Увійти» і знову опиняєтеся на wp-login.php, часто з reauth=1 або redirect_to в адресному рядку і без жодної помилки. Іноді браузер здається і показує ERR_TOO_MANY_REDIRECTS. В обох випадках, поки запит доходить до /wp-admin/, WordPress не вірить, що ви увійшли, тож знову відправляє на вхід, і коло повторюється. Пароль тут майже ніколи ні до чого: на неправильний пароль WordPress показує помилку, а цикл - ні.

Перевірте свій сайт

>

Через що виникає

WordPress тримає вас у системі за допомогою cookie, привʼязаних до конкретного хоста й шляху, і цикл починається щоразу, коли cookie, встановлене під час входу, не повертається з наступним запитом до адмінки. Звичайна причина - розбіжність між налаштуваннями «Адреса WordPress» і «Адреса сайту», наприклад одна з www, а друга без, або одна на http, а друга на https: ви входите на одному хості, а вас відправляють в адмінку на іншому, де cookie не діє. Майже так само часто винен HTTPS за проксі чи CDN: відвідувач на https, але сервер бачить лише звичайний http від Cloudflare чи балансувальника, тож WordPress вирішує, що запит незахищений, шукає не те cookie або знову перенаправляє на https, і так по колу. Інші причини - кеш сторінок чи CDN, що кешує wp-login.php або /wp-admin/, неправильний COOKIE_DOMAIN у wp-config.php, плагін безпеки чи переадресацій і дубльовані правила https або www у .htaccess, які скасовують одне одного.

Як виправити

  1. Запустіть перевірку на цій сторінці для https://ваш-сайт.com/wp-admin/, використовуючи ту адресу, на якій ви справді входите. Справний сайт відповідає однією переадресацією 302 на wp-login.php з redirect_to і reauth=1, а сторінка входу повертає 200. Наша перевірка не надсилає cookie, тож бачить те саме, що й відвідувач, який не увійшов. Якщо ланцюжок чистий, цикл виникає лише після входу і криється в cookie, налаштуваннях проксі чи кеші. Якщо перевірка сама показує цикл переадресацій або стрибки між http і https чи між www і доменом без www, ви знайшли конфлікт, навіть не входячи.
  2. Порівняйте дві адреси в «Налаштування», «Загальні»: «Адреса WordPress (URL)» і «Адреса сайту (URL)». Вони мають мати ту саму схему й той самий хост, що й адреса у вашому браузері, зазвичай обидві https і обидві з www або обидві без. Якщо до адмінки не дістатися, додайте define('WP_HOME', 'https://ваш-сайт.com'); і define('WP_SITEURL', 'https://ваш-сайт.com'); у wp-config.php вище рядка з проханням припинити редагування. Ці константи мають пріоритет над значеннями в базі.
  3. Якщо сайт працює за Cloudflare, балансувальником чи зворотним проксі, змусьте WordPress бачити HTTPS. У Cloudflare встановіть SSL/TLS у режим Full (strict) замість Flexible. Для інших проксі, що передають заголовок X-Forwarded-Proto, додайте у wp-config.php перед підключенням wp-settings.php: if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
  4. Виключіть вхід і адмінку з усіх кешів. wp-login.php, /wp-admin/ і будь-який запит із cookie wordpress_logged_in ніколи не мають кешуватися плагіном кешування, серверним кешем сторінок чи правилом CDN на кшталт Cache Everything. Після зміни правила очистіть кеш.
  5. Виключіть плагіни й .htaccess. Перейменуйте папку wp-content/plugins через FTP або файловий менеджер, щоб вимкнути всі плагіни одразу, і спробуйте увійти. Якщо вийшло, поверніть назву папки й вмикайте плагіни по одному, починаючи з плагінів безпеки, переадресацій і кешування. У .htaccess шукайте дубльовані правила, що примусово ведуть на https або www: має бути одна канонічна переадресація, а не дві, що воюють між собою.
  6. Насамкінець очистіть cookie сайту в браузері або спробуйте приватне вікно і пошукайте рядок COOKIE_DOMAIN у wp-config.php. Якщо там вказано інший хост, ніж той, на якому ви входите, видаліть його: WordPress сам вибирає правильний домен для cookie.

Схожі помилки