Очень странная проблема с ocasional 404 ошибками.

Вопрос или проблема

У меня наблюдается очень странный эффект на моем сайте с периодическими ошибками 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. Я постараюсь помочь вам разобраться в возможных причинах и предложить пути решения.

Понимание проблемы:

  1. Случайные ошибки 404: Первое, что необходимо подчеркнуть, это то, что ошибки 404 появляются не постоянно, а лишь иногда, что усложняет диагностику. Это говорит о том, что проблема может быть связана с изменениями в конфигурации сайта, произошедшими в результате обновления плагинов или тем, а также с взаимодействием различных компонентов системы.

  2. Не на всех страницах: Ошибки 404 наблюдаются исключительно на страницах, но не на постах, продуктах WooCommerce, курсах LearnDash и других типах контента. Это указывает на возможные проблемы с конкретными типами страниц, которые могут затрагиваться определенными плагинами или настройками.

  3. Обновления плагинов: Вы отметили, что проблемы чаще возникают после обновления плагина Yoast SEO, а также после перехода на новую тему. Это может свидетельствовать о проблемах совместимости, вызванных спецификой кода плагина или темы, особенно в условиях взаимодействия с другими установленными плагинами.

  4. Временное решение: Вы предложили интересный обходной путь, удаляя правила перезаписи и перенаправляя на ту же страницу, что позволяет избежать бесконечного цикла редиректов. Это может служить временной мерой, но основная проблема требует более детального изучения.

Возможные причины и решения

  1. Конфликты плагинов: Начните с отключения всех плагинов, кроме критически важных, и проверьте, сохраняется ли проблема. Если ошибка исчезает, активируйте плагины по одному, чтобы выявить проблемный. Это может помочь выявить конфликтующий плагин.

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

  3. Обновление тем и ядра: Убедитесь, что используемая вами тема (Astra Pro) и ядро WordPress также обновлены до последней версии, совместимой с используемыми плагинами. Конфликты версий могут стать источником нестабильной работы.

  4. Проверка на уровне сервера: Данная проблема может быть связана и с недостаточной конфигурацией сервера. Убедитесь, что серверная среда оптимизирована для работы с WordPress и Nginx. Возможно, обратитесь к хостинг-провайдеру для проверки логов сервера на предмет ошибок, связанных с выполнением PHP-скриптов, которые могут указывать на проблемы.

  5. Оптимизация настроек PHP: Даже если лимит памяти составляет 2048 МБ, стоит обратить внимание на настройки, такие как max_execution_time, которые хоть и не влияют на мгновенные 404, могут быть важны в общем случае при выполнении скриптов. Вы можете проверить и оптимизировать настройки PHP через файл wp-config.php.

  6. Логи и отладка: Хотя вашей хостинг-компанией используются символические ссылки, попробуйте добавить отладочные сообщения в файл 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 вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...