WordPress — защищенная паролем страница Белая страница после входа в систему

#php #wordpress

#php #wordpress

Вопрос:

У меня есть сайт и на нем работает WordPress 5.7, и у меня есть 2 страницы, защищенные паролем, и когда я перехожу на эти страницы, я получаю белый экран после входа в систему. URL, на который я перенаправляюсь, выглядит так: /wp-login.php?action=postpass я пробовал следующие решения:

  • Загрузите свежую версию WordPress и замените wp-login.php на моем сайте со свежим.
  • Деактивированы все мои плагины
  • Деактивировал мою тему и переключился на тему по умолчанию (двадцать девятнадцать)

И ни один из них не сработал, у кого-нибудь есть какое-либо другое решение этой проблемы?

Спасибо,

Комментарии:

1. Белый экран предполагает, что вы столкнулись с ошибкой с отключенным выводом ошибок. Установите для WP_DEBUG и WP_DEBUG_LOG значение true в вашем wp-config.php файл ( wordpress.org/support/article/debugging-in-wordpress /… ) и перейдите на страницу, где вы видите проблему. Как только у вас появятся подробности в журнале, пожалуйста, опубликуйте.

2. Для WP_DEBUG установлено значение true, и у меня даже есть error_reporting(E_ALL); ini_set(‘display_errors’, 1); по-прежнему ничего.

3. Включен ли у вас журнал (запись в файл журнала, а не вывод на страницу)]?

4. Я не думаю, что я это делаю, как мне это сделать?

5. Вы пытались получить доступ к странице с помощью другого браузера? Это может быть связано с HTTP-заголовком политики реферера.

Ответ №1:

Трудно точно сказать, что происходит с такой ограниченной информацией. Анализ кода wp-login.php показывает, что описанная проблема может возникнуть, если $_SERVER['HTTP_REFERER'] в запросе нет. Я воспроизвел проблему, добавив

 unset( $_SERVER['HTTP_REFERER'] );
 

перед строкой 650

 $referer = wp_get_referer();
 

в wp-login.php .

Чтобы убедиться, что проблема связана с реферером, попробуйте вставить строку

 var_dump( $_SERVER['HTTP_REFERER'] );
 

перед тем, как ввести ту же строку 650 wp-login.php (и не забудьте удалить ее позже), и сообщите мне результат — вы должны увидеть его на белом экране.

Мне кажется, у вас появится следующее сообщение:

 Warning: Undefined array key "HTTP_REFERER" in ...wp-login.php on line 650
NULL
 

Вопрос в том, почему у вас нет реферера здесь.

Браузер не предоставляет ссылку, выполняющую HTTP-запрос со страницы HTTPS. Если сайт был переведен на HTTPS неправильно, форма может содержать action поле with http: .

Некоторые расширения браузера также могут делать трюки. Пожалуйста, деактивируйте их все.

Комментарии:

1. И никакой реакции вообще… Интересно, почему люди задают вопросы, отмечают их как очень важные с помощью награды и просто не читают ответы.

2. Извините, я был занят, и это был низкий приоритет, над которым я работал некоторое время, не мог понять, поэтому я разместил его здесь… Я попробую ваше решение позже сегодня, спасибо за ваш ответ

3. @KAGGDesign У меня та же проблема, что и у создателя вопроса, и я вставил вашу строку кода. Теперь я вижу NULL на белом экране…

4. Я просто устанавливаю переменную, добавляя <input type="hidden" name="_wp_http_referer" value="'.get_permalink().'" /> в тег формы вывода get_the_password_form() функции в wp-includes/post-template.php (строка 1726 для меня) (описано @shoaibhaibtan в его ответе). Это работает, но кажется немного грязным и не предназначено wordpress…

Ответ №2:

С августа 2020 года Chrome и другие браузеры НАЧАЛИ внедрять более жесткую политику ссылок по умолчанию strict-origin-when-cross-origin .

Веб-разработчики могут указывать политику ссылок в своих документах, которая влияет на Referer заголовок, отправляемый при исходящих запросах и переходах. Если политика не указана, Chrome теперь будет использовать strict-origin-when-cross-origin в качестве политики по умолчанию вместо no-referrer-when-downgrade .

Добавление с no-referrer-when-downgrade предположительно должно заставить реферера понизить свой предыдущий статус.

 <meta name="referrer" content="no-referrer-when-downgrade">
 

(Даже если это может исправить, это может быть не лучшим вариантом, поскольку в ближайшем / отдаленном будущем может стать обязательным переход на более жесткий, поскольку закон меняется в отношении конфиденциальности в разных странах).

Предполагается, что влияние должно быть ограниченным, вы можете подпадать под эту категорию. И вы не единственный.

На основе обсуждений с другими браузерами и собственных экспериментов Chrome, выполненных в Chrome 84, ожидается, что видимые пользователем поломки будут ограничены.

Полный подробный пост, опубликованный прекрасными людьми в Google, не стесняйтесь взглянуть. У них есть раздел «Если это повлияет на ваш сайт, рассмотрите альтернативы».

Ответ №3:

у меня была такая же проблема, чтобы решить мою проблему, к которой я перехожу wp-includes/post-template.php

и выполните поиск функции get_the_password_form()

и добавьте это

<input type="hidden" name="_wp_http_referer" value="'.get_permalink().'" />

после $output а также добавьте это ( apply_filters( ‘the_password_form’, $output); вернуть $output; )

это работа для меня

Ответ №4:

У меня только что была такая же проблема. Затем заметил, что у нас есть домен в WordPress с www. но они установили ссылку на защищенную страницу без www. Когда я ввожу пароль без www, он перенаправляется на домен без www и не имеет cookie для этого домена, поэтому не входит в систему и белая страница. Я добавил перенаправление с домена, отличного от www, на домен www в htaccess, чтобы убедиться, что домен указан правильно, и это сработало!