#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, чтобы убедиться, что домен указан правильно, и это сработало!