WordPress

strony — Bardzo dziwny problem z okazjonalnymi błędami 404

  • 27 kwietnia, 2024
  • 4 min read
strony — Bardzo dziwny problem z okazjonalnymi błędami 404


Mam bardzo dziwny efekt na mojej stronie internetowej i sporadycznie pojawiają się błędy 404.

Po pierwsze: nie jest to normalny problem z regułami przekierowań lub htaccess. Dlatego proszę nie komentować w stylu: „sprawdź swoje przeróbki”. Znam się całkiem dobrze na tym co robię i mogę z całą pewnością powiedzieć, że następujący efekt jest nie normalne.

Problem z 404 nie występuje cały czas I występuje tylko na stronach. Tutaj to nie występuje:

  • Posty
  • Produkty WooCommerce
  • Kursy Learndash
  • Strony taksonomii
  • oraz każdy inny rodzaj treści
  • nawet na stronie głównej
  • nie na stronie skonfigurowanej dla sklepu WooCommerce
  • nie w koszyku i na stronie kasy
  • nie na stronie używanej na forum wpForo

Tak, używam wielu ciężkich wtyczek, ale serwer radzi sobie z nimi bardzo dobrze i z przyzwoitą szybkością.

Zwykle wszystko działa. Ale od czasu do czasu WordPress przechodzi w ten dziwny tryb 404 i po prostu przestaje wyświetlać normalne strony.

Początkowo problem pojawił się dopiero po aktualizacji wtyczek. Nie w przypadku każdej wtyczki, ale zwykle tak jest w przypadku „ciężkich” wtyczek. Prawie na pewno zdarzało się to zawsze po aktualizacji Yoast SEO.

Warto przeczytać!  zapytanie wp — Jak uzyskać wszystkie post_id i meta_value za pomocą meta_key w tabeli wp_postmeta

Teraz, po zmianie motywu z Twenty Thirteen na Astra Pro, problem jest również spowodowany innymi wyzwalaczami. Nie potrafię dokładnie powiedzieć, co go powoduje.

Aby ponownie wyświetlić strony (przynajmniej do następnego wystąpienia), pomaga:

  • dezaktywuj i ponownie aktywuj jedną z ciężkich wtyczek (Yoast SEO miał 100% szans na działanie, ale czasami także LearnDash)
  • Zapisz ponownie linki bezpośrednie

Jak powiedziałem, nie jest to problem z htaccess lub czymś podobnym, ponieważ wszystko normalnie działa. Serwer to Nginx, a mój host Raidbox obsługuje to na całym świecie dla dziesiątek tysięcy stron internetowych.

Znalazłem możliwą wskazówkę tutaj:

Jednak limit pamięci wynosi już 2048 MB i nawet nie jest bliski wyczerpania. Maksymalny czas wykonania skryptu wynosi 1 minutę i nie może być problemem (404 pojawia się natychmiast).

Buforowanie jest regulowane przez mojego hosta, ale nie ma wpływu na efekt. Jeśli to wyłączę, problem nadal występuje.

Dezaktywacja wtyczek również nie może być rozwiązaniem. Po pierwsze potrzebuję zainstalowanych wtyczek (wiem, że należy zachować się oszczędnie i za wszelką cenę starać się unikać dodatkowych wtyczek, ale co ma być, to musi). Ponadto problem występował już (po aktualizacji wtyczek), gdy nie zainstalowałem jeszcze WooCommerce, wpForo, Learndash i kilku innych.

Warto przeczytać!  Jak dodać schemat receptur przyjazny dla SEO w WordPress (łatwy sposób)

WordPress jest zawsze w najnowszej wersji (jest tak od lat), a wersja PHP jest zawsze tak aktualna, jak pozwala na to mój host (obecnie 8.2).

Ponieważ teraz pilnie potrzebowałem działania (po prostu irytujące jest ponowne zapisywanie bezpośrednich linków co 15 minut, aby ponownie udostępnić strony, nie wspominając o złym doświadczeniu użytkownika), dodałem obejście do funkcji motywu podrzędnego Astry .php:

add_action('template_redirect', 'hkp_404_workaround');
function hkp_404_workaround ()
{
    if (is_404())
    {
        if (!isset($_GET['redirect404']))
        {
            $url=" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

            $redirect_to = $url . (parse_url($url, PHP_URL_QUERY) ? '&' : '?') . 'redirect404=1';

            //flush_rewrite_rules(); // no effect
            delete_option('rewrite_rules'); // works great

            wp_redirect($redirect_to);
            exit;
        }
    }
}

Tutaj do danych wyjściowych strony 404 dodawany jest hak, usuwający reguły rewrite_rules (zmuszając WordPress do ich odtworzenia), a następnie przekierowujący do tego samego adresu URL, który został wywołany. Strona zostanie następnie przywrócona – działa bardzo dobrze jako tymczasowe obejście problemu! Dodatkowy parametr gwarantuje, że w przypadku rzeczywistego błędu 404 całość nie zakończy się w nieskończonej pętli przekierowań. Dla większej przejrzystości usunąłem dodatkowe logowanie z powyższego kodu.

Tak jak mówiłem, na razie wszystko działa, ale chciałbym znaleźć przyczynę i ją naprawić.

Warto przeczytać!  10 najlepszych narzędzi i wtyczek dla punktów sprzedaży dla Twojej firmy WordPress

Będę wdzięczny za wszelkie wskazówki, jak znaleźć przyczynę.

Niestety nie mogę wykonać żadnych wyników debugowania ani niczego podobnego w WordPress Core, ponieważ mój host nie oferuje uprawnień do zapisu (katalogi Core są integrowane tylko poprzez dowiązania symboliczne). Mógłbym jednak dodać coś do wp_config.php.


Źródło