Циклическое перенаправление WordPress wp-admin через https
Я использую nginx в качестве веб-сервера и отредактировал файл конфигурации для работы с https. Я изменил настройки URL WordPress на https и также добавил код WordPress force ssl admin в файл wp-config, но продолжаю получать ошибку "На этой странице обнаружено циклическое перенаправление"
Вы добавили $_SERVER['HTTPS'] = 'on';
в ваш wp-config.php?
Также вам следует использовать плагин WP Migrate DB для миграции с http://вашсайт.com
на https://вашсайт.com

Спасибо! Вероятно, ты сэкономил мне несколько часов попыток понять, почему админка не работает с SSL.

это здорово, единственная проблема - как установить плагин, если сайт не работает :) Я знаю, что всегда нужно делать резервную копию перед такими действиями, но все же. Приведенное ниже решение сработало для меня :)

Почему это работает? Я уже использовал инструмент S&R от Interconnect. В базе данных уже должен быть правильный протокол.

условие if
в документации не сработало для меня, поэтому я просто всегда устанавливаю $_SERVER['HTTPS'] = 'on';

После добавления $_SERVER['HTTPS']='on';
в wp-config.php я получаю сообщение Извините, у вас нет доступа к этой странице.
на странице /wp-admin
, хотя я вошёл как администратор. Я использую Cloudflare flexible SSL, поэтому HTTPS-трафик перенаправляется на HTTP-порт.

Нам нужно добавить if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) { $_SERVER['HTTPS'] = 'on'; }
перед require_once(ABSPATH . 'wp-settings.php');
, как сказано здесь: https://wordpress.stackexchange.com/questions/250240/setting-serverhttps-on-prevents-access-to-wp-admin#comment414886_250254 https://wordpress.stackexchange.com/questions/262194/cannot-login-to-wordpress-admin-with-ssl-terminated-load-balancer/263461#263461

Извините, что добавляю ещё один комментарий про $_SERVER['HTTPS'] = 'on';, но это действительно исправило все проблемы с редиректами и у меня. Я перепробовал все возможные изменения в nginx.conf, а также remove_filter('template_redirect', 'redirect_canonical'); что сработало, но только для главной страницы. $_SERVER['HTTPS'] = 'on' сразу же исправил всё. Спасибо!!!!

Спасибо за это. Это сработало после 2 часов попыток других исправлений.

+10000, бился головой об стену, пытаясь понять, почему SSL сломал URLs в админке и на страницах

Огромное спасибо! Часы поисков наконец привели меня в нужное место.

СПАСИБО!! Это очень важно для Cloudflare и должно быть частью руководства.

Вы гений! Огромное спасибо. Я потратил столько часов, чтобы разобраться в этом. Вы вытащили меня из бесконечного цикла. Спасибо!!

У меня была похожая проблема, и я просто добавил следующий фрагмент в свой wp-config.php
:
/** SSL */
define('FORCE_SSL_ADMIN', true);
// в некоторых настройках HTTP_X_FORWARDED_PROTO может содержать
// список, разделенный запятыми, например http,https
// поэтому проверяем наличие https
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
как предложено в Кодексе. Это понадобится только в случае, если у вас включен SSL passthrough в настройках балансировщика нагрузки (или файрвола). Это означает, что хотя вы можете получить доступ к сайту через HTTP внутри TLS/SSL, сервер получает только HTTP-трафик. Чтобы это учесть, нужен приведенный выше заголовок, чтобы WordPress мог "установить" HTTPS в значение on
в массиве конфигурации $_SERVER
.

Это отличное решение, особенно для тех, кто использует балансировщик нагрузки. Я размещал это с помощью Dokku (самостоятельно развертываемого клона Heroku) и столкнулся с проблемами загрузки статических ресурсов и бесконечным редиректом в wp-admin. Dokku также использует обратный прокси nginx для перенаправления входящего трафика с порта 443 на порт 80, и это решение исправляет проблему.

Мне пришлось просто добавить $_SERVER['HTTPS'] = 'on';
, потому что HTTP_X_FORWARDED_PROTO даже нет в настройках на сервере моего клиента :|

Идеально решило мою проблему при использовании балансировщика нагрузки AWS.

Это также решило проблему "Слишком много перенаправлений", так как мой сайт находится за балансировщиком нагрузки на AWS.

Думаю, важно добавить к этому ответу исправление для файла .htaccess в таких случаях: https://stackoverflow.com/questions/36748110/htaccess-too-many-redirects-when-trying-to-force-https, проверьте ответ @harshal-lonare.

Поскольку у меня пока нет права оставлять комментарии, я опубликую это дополнение в виде отдельного ответа:
Решение, предложенное Elias, с добавлением следующего кода в wp-config.php
, сработало для меня:
/** SSL */
define('FORCE_SSL_ADMIN', true);
// в некоторых настройках HTTP_X_FORWARDED_PROTO может содержать
// список, разделённый запятыми, например http,https
// поэтому проверяем наличие https
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
Однако это сработало только тогда, когда я разместил этот код перед всем остальным в этом файле!

Именно в этом была моя проблема. Я добавил эти строки в конец файла, и это не работало. Я уже был готов пересоздать сайт с нуля. Переместил их в начало, и бац — проблема решена. Спасибо вам, огромное спасибо!!

Это отличное решение, если вы используете гибкий SSL за прокси-DNS, например Cloudflare. Спасибо.

Подтверждаю, что работает. Огромное спасибо, это решает множество проблем с API и IFrame. На сайте не включен HTTPS, но для некоторых страниц он нужен. WordPress должен иметь такую настройку по умолчанию...

К вашему сведению - этот код может находиться где угодно, но должен быть перед require_once( ABSPATH . 'wp-settings.php' );
, который находится в конце файла.

Еще один вариант для заметок, просто добавьте это в начало файла wp-config.php
Причина в том, что могут быть балансировщики нагрузки или что-то еще, что не передает правильное значение https, поэтому вам нужно получить его из другого источника и имитировать для WordPress.
if ( (isset($_SERVER['HTTP_X_FORWARDED_PORT'] ) && ( '443' == $_SERVER['HTTP_X_FORWARDED_PORT'] ))
|| (isset($_SERVER['HTTP_CF_VISITOR']) && $_SERVER['HTTP_CF_VISITOR'] == '{"scheme":"https"}')) {
$_SERVER['HTTPS'] = 'on';
}

Только что применил это решение для WordPress 5.5.1, работающего за HAProxy на фаерволе pfsense. Другие предложенные варианты не работали корректно, по крайней мере "из коробки" без дополнительной настройки HAProxy и заголовков, которые он отправляет.

5-летний вопрос...
Итак, у меня возникла эта ошибка после установки SSL-сертификата и изменения всех ссылок с http
на https
с использованием wp-cli.phar, который можно найти здесь.
Я пробовал различные конфигурации, но ни одна из них не решала проблему, пока я не установил следующее:
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
на это:
define('FORCE_SSL_ADMIN', false);
define('FORCE_SSL_LOGIN', false);
Это позволило мне зайти на страницу входа, но фактически войти в систему не удавалось. Я попробовал второй вариант ответа, но, к сожалению, это тоже не помогло, пока я не внес следующее изменение:
/** SSL */
define('FORCE_SSL_ADMIN', true);
// в некоторых настройках HTTP_X_FORWARDED_PROTO может содержать
// список через запятую, например http,https
// поэтому проверяем наличие https
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== true)
$_SERVER['HTTPS']='on';
По какой-то причине, которую я не понимаю, мне пришлось изменить
!== false
на
!== true
Я использую nginx в качестве хоста и обратного прокси для nginx unit... Если у кого-то есть идеи, почему это сработало, пожалуйста, дайте мне знать.

На самом деле... У меня была эта проблема, а решение оказалось довольно простым и даже неловким. По какой-то причине на хостинге папка wp-admin была удалена, из-за чего и возникала эта ошибка.
После многих часов тестирования различных способов я просто заметил это, и после загрузки папки обратно всё заработало как обычно.
Проверьте это, ребята, иногда всё может быть настолько просто.

У меня была такая же проблема, когда я разместил свой сайт на Azure WebApp Service под Linux.
Попробуйте этот плагин. Будьте осторожны, когда он активен, он работает. https://wordpress.org/plugins/jsm-force-ssl/
Этот плагин использует нативные фильтры WordPress вместо буфера вывода PHP для максимальной надежности, производительности и совместимости с кешированием (этот плагин не влияет на производительность кеширования), а также 301 постоянные редиректы для лучшего SEO (редиректы 301 считаются лучшими для SEO при переходе с HTTP на HTTPS).
Учитывает переменные прокси / балансировки нагрузки для крупных хостинг-сред:
HTTP_X_FORWARDED_PROTO HTTP_X_FORWARDED_SSL Требования:
Ваш веб-сервер должен быть настроен с SSL-сертификатом и способен обрабатывать HTTPS-запросы.
Просто активируйте плагин, и всё готово:
Нет настроек плагина для изменения, и никакие изменения не вносятся в конфигурацию WordPress — просто активируйте или деактивируйте плагин, чтобы включить / отключить фильтры и динамические редиректы.

Я столкнулся с той же проблемой, и после нескольких часов исследований и доработок мне удалось заставить всё работать. Я поделюсь всем, что сделал, потому что не уверен, связаны ли все эти действия.
Во-первых, мой сайт на WordPress размещен на cPanel, поэтому я использовал инструмент Softaculous в cPanel для обновления версии WordPress.
Во-вторых, я обновил базу данных WordPress.
(Я заметил, что мой файл .htaccess в корневой папке сайта был обновлен с добавлением строки RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
)
Затем я проверил файл .htaccess в папке wp-admin и увидел там следующие команды:
Order Allow,Deny
Deny from all
На сайте WordPress я прочитал, что эти команды предназначены для предотвращения веб-доступа к файлам в этой папке, но такое поведение мне не требовалось (на мой взгляд).
Поэтому я закомментировал эти строки и смог загрузить админ-панель.

Спасибо, это сработало для меня. Вы сделали мой день
/** SSL */
define('FORCE_SSL_ADMIN', true);
// в некоторых настройках HTTP_X_FORWARDED_PROTO может содержать
// список, разделенный запятыми, например http,https
// поэтому проверяем наличие https
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';

Это просто ответ Элиаса?
