Вопрос или проблема
У меня наблюдается очень странный эффект на моем сайте с периодическими ошибками 404.
Прежде всего: это не обычная проблема с правилами перенаправления или htaccess
. Поэтому, пожалуйста, не делайте комментариев типа “проверьте свои переписывания”. Я достаточно хорошо знаю, что делаю, и могу с уверенностью сказать, что следующий эффект не нормален.
Проблема 404 не возникает всегда и возникает только на страницах. Она не возникает здесь:
- Записи
- Продукты WooCommerce
- Курсы Learndash
- Страницы таксономий
- и любой другой тип контента
- даже не на главной странице
- не на странице, настроенной для магазина WooCommerce
- не на странице корзины и оформления заказа
- не на сайте, используемом для форума wpForo
Да, я использую много тяжелых плагинов, но сервер справляется с ними очень хорошо и с достойной скоростью.
Обычно все работает. Но время от времени WordPress переходит в этот странный режим 404 и просто перестает отображать обычные страницы.
Изначально проблема появилась только после обновления плагинов. Не с каждым плагином, но обычно это происходит с “тяжелыми” плагинами. Почти всегда это происходило после обновления Yoast SEO.
Теперь после смены темы с Twenty Thirteen на Astra Pro проблема также вызывается другими триггерами. Я не могу точно сказать, что ее вызывает.
Чтобы снова отобразить страницы (по крайней мере, до следующего появления), помогает следующее:
- деактивировать и повторно активировать один из тяжелых плагинов (Yoast SEO имел 100% вероятность сработать, но иногда и LearnDash тоже)
- Пересохранить постоянные ссылки
Как я уже говорил, это не проблема с htaccess
или чем-то подобным, так как все обычно работает. Сервер Nginx, и мой хостинг Raidboxes обрабатывает это глобально для десятков тысяч веб-сайтов.
Я нашел возможную подсказку здесь:
https://stackoverflow.com/a/28007791
Однако лимит памяти уже 2048 МБ и даже близко не исчерпан. Максимальное время выполнения скриптов составляет 1 минуту и не может быть проблемой (404 возникает сразу).
Кэширование регулируется моим хостингом, но не влияет на эффект. Если я отключаю его, проблема все равно возникает.
Деактивация плагинов тоже не может быть решением. Во-первых, мне нужны установленные плагины (я знаю, что мне следует экономить с этим и стараться избегать дополнительных плагинов любой ценой, но что должно быть, то должно быть). Также проблема уже возникала (после обновления плагинов), когда я еще не установил WooCommerce, wpForo, Learndash и несколько других.
WordPress всегда в последней версии (он таковыми является уже многие годы), и версия PHP всегда актуальна в пределах, разрешенных моим хостингом (в настоящее время 8.2).
Поскольку у меня теперь была неотложная необходимость в действиях (просто раздражает, что приходится пересохранять постоянные ссылки каждые 15 минут, чтобы страницы снова стали доступны, не говоря уже о плохом пользовательском опыте), я добавил обходное решение в functions.php
своей дочерней темы Astra:
add_action('template_redirect', 'hkp_404_workaround');
function hkp_404_workaround ()
{
if (is_404())
{
if (!isset($_GET['redirect404']))
{
$url="https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$redirect_to = $url . (parse_url($url, PHP_URL_QUERY) ? '&' : '?') . 'redirect404=1';
//flush_rewrite_rules(); // без эффекта
delete_option('rewrite_rules'); // работает отлично
wp_redirect($redirect_to);
exit;
}
}
}
Здесь к выводу 404 страницы добавляется хук, который удаляет rewrite_rules
(заставляя WordPress воссоздать их) и затем перенаправляет на тот же URL, который был вызван. Сайт снова работает – это очень хорошо как временное решение! Дополнительный параметр обеспечивает то, что в случае реальной ошибки 404 все это не заканчивается в бесконечном цикле перенаправления. Я убрал дополнительное логирование из приведенного кода для большей ясности.
Как я уже сказал, это работает на данный момент, но я хотел бы найти коренную причину и исправить ее.
Я буду благодарен за любые подсказки о том, как я мог бы найти причину.
К сожалению, я не могу сделать никакой отладочный вывод или что-то подобное в ядре WordPress, потому что мой хостинг не предлагает разрешений на запись (каталоги ядра интегрированы только через символические ссылки). Однако я мог бы добавить что-то в wp_config.php
.
Удалось ли вам решить эту проблему? У меня такая же проблема, но в моем случае, кажется, только страница Learn Dash LMS вызывает ошибки 404 (которые затем решаются путем сохранения постоянных ссылок). Я думаю, что это проблема, созданная WooCommerce. Для меня эта проблема кажется случайной, но чаще всего возникает после того, как кто-то покупает что-либо через WooCommerce.
Ответ или решение
На вашей веб-сайте возникает проблему с периодическими ошибками 404, что может указывать на наличие более глубоких проблем, вероятно, связанных с конфликтами между плагинами или другими аспектами конфигурации WordPress. Я постараюсь помочь вам разобраться в возможных причинах и предложить пути решения.
Понимание проблемы:
-
Случайные ошибки 404: Первое, что необходимо подчеркнуть, это то, что ошибки 404 появляются не постоянно, а лишь иногда, что усложняет диагностику. Это говорит о том, что проблема может быть связана с изменениями в конфигурации сайта, произошедшими в результате обновления плагинов или тем, а также с взаимодействием различных компонентов системы.
-
Не на всех страницах: Ошибки 404 наблюдаются исключительно на страницах, но не на постах, продуктах WooCommerce, курсах LearnDash и других типах контента. Это указывает на возможные проблемы с конкретными типами страниц, которые могут затрагиваться определенными плагинами или настройками.
-
Обновления плагинов: Вы отметили, что проблемы чаще возникают после обновления плагина Yoast SEO, а также после перехода на новую тему. Это может свидетельствовать о проблемах совместимости, вызванных спецификой кода плагина или темы, особенно в условиях взаимодействия с другими установленными плагинами.
-
Временное решение: Вы предложили интересный обходной путь, удаляя правила перезаписи и перенаправляя на ту же страницу, что позволяет избежать бесконечного цикла редиректов. Это может служить временной мерой, но основная проблема требует более детального изучения.
Возможные причины и решения
-
Конфликты плагинов: Начните с отключения всех плагинов, кроме критически важных, и проверьте, сохраняется ли проблема. Если ошибка исчезает, активируйте плагины по одному, чтобы выявить проблемный. Это может помочь выявить конфликтующий плагин.
-
Настройки кеширования: Несмотря на то, что вы указали, что проблема не исчезает при отключённом кешировании, убедитесь, что используются актуальные и правильно настроенные плагины кеширования, если они нужны. Обратите внимание на настройки кеша и настройте их так, чтобы минимизировать влияние на динамическое содержимое.
-
Обновление тем и ядра: Убедитесь, что используемая вами тема (Astra Pro) и ядро WordPress также обновлены до последней версии, совместимой с используемыми плагинами. Конфликты версий могут стать источником нестабильной работы.
-
Проверка на уровне сервера: Данная проблема может быть связана и с недостаточной конфигурацией сервера. Убедитесь, что серверная среда оптимизирована для работы с WordPress и Nginx. Возможно, обратитесь к хостинг-провайдеру для проверки логов сервера на предмет ошибок, связанных с выполнением PHP-скриптов, которые могут указывать на проблемы.
-
Оптимизация настроек PHP: Даже если лимит памяти составляет 2048 МБ, стоит обратить внимание на настройки, такие как
max_execution_time
, которые хоть и не влияют на мгновенные 404, могут быть важны в общем случае при выполнении скриптов. Вы можете проверить и оптимизировать настройки PHP через файлwp-config.php
. -
Логи и отладка: Хотя вашей хостинг-компанией используются символические ссылки, попробуйте добавить отладочные сообщения в файл
wp-config.php
, например, включив WP_DEBUG и WP_DEBUG_LOG. Это позволит записывать ошибки и предупреждения в лог и, возможно, выявить проблемные места.
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Заключение
Хотя временное решение работает, важно найти и устранить коренную причину проблемы. Выполнение предложенных проверок и экспериментов должно помочь вам определить, что именно вызывает эти неполадки, особенно если они проявляются в связи с определёнными действиями на сайте (как, например, после покупок в WooCommerce). Устранение ошибок 404 не только улучшит пользовательский опыт, но и положительно скажется на SEO вашего сайта.