Magento 2.3 - Homepage-Weiterleitung auf 404-Seite nicht gefunden

7

Die Magento 2.3-Homepage gibt den Fehler 404 Page Not Found zurück. Dies tritt nur auf, wenn Sie nicht angemeldet sind . Nach dem Anmelden funktioniert die Homepage ordnungsgemäß. (Es scheint in der mobilen Ansicht zu funktionieren, selbst wenn ein 404 in der Desktop-Ansicht zurückgegeben wird.)

Auch danach cache:clean page_cachefunktioniert die Homepage einwandfrei.

Hat jemand diese Art von Problem konfrontiert?

Emipro Technologies Pvt. GmbH.
quelle
Haben Sie eine Ursache für dieses Problem gefunden? Ich stehe auch davor. Dies geschieht zufällig, ohne dass leere Datensätze in url_rewrites vorhanden sind, und wird nach dem Löschen des Caches wieder normal. Vielen Dank!
Robert Schmidt
Nein, wir haben versucht, es aufzuspüren. Stehst du ab wie oft?
Emipro Technologies Pvt. Ltd.
Sie müssen nicht den gesamten Cache leeren. Wir haben festgestellt, dass es auch funktioniert, nachdem nur der gesamte Seitencache gelöscht wurde. php bin/magento cache:clean full_page
Emipro Technologies Pvt. Ltd.
Es passiert völlig zufällig, ohne dass etwas protokolliert wird. Ich habe eine Ausgabe auf Github eröffnet, vielleicht können Sie Ihre Eingabe auch dort posten: github.com/magento/magento2/issues/21703
Robert Schmidt
Wir haben das gleiche Problem unter Magento 2.3.1 mit der Homepage bei der Neuinstallation mit Luma-Beispieldaten.
Sergey Baranov

Antworten:

5

Geben Sie in Ihre Datenbank ein und führen Sie Folgendes aus:

SELECT * FROM `url_rewrite` WHERE request_path='';

Löschen Sie die Zeilen und machen Sie danach:

php bin/magento setup:upgrade
php bin/magento cache:flush
  • Deaktivieren Sie das Page Cacheund prüfen Sie , ob der Fehler weiterhin besteht.

  • Überprüfen Sie redis cache, ob Sie haben , und reinigen Sie es.

  • Sehen Sie sich die auf der Homepage zugewiesene Vorlage an und überprüfen Sie die Konsole auf Fehler.
Ylgen Guxholli
quelle
2
Erst nach sauberem Seiten-Cache funktioniert die Homepage. Wir haben jedoch keinen leeren request_path erhalten.
Emipro Technologies Pvt. Ltd.
Meine Antwort wurde aktualisiert.
Ylgen Guxholli
Der Seitencache kann nicht deaktiviert werden. Seite ist live.
Emipro Technologies Pvt. Ltd.
1
Meine Antwort wurde aktualisiert.
Ylgen Guxholli
Haben Sie sich dieser Art von Problem gestellt?
Emipro Technologies Pvt. Ltd.
4

Das gleiche Problem auf meiner neuen Magento 2.3.1-Site, meine Site ist nicht leer request_path.

Der Grund dafür ist, dass der integrierte Seiten-Cache die GET- und HEAD-Anforderungen nicht unterscheidet und sie nicht separat zwischenspeichert. Nach HEAD-Anforderungen mit der Antwort 404 wird die Homepage zwischengespeichert, und danach gibt jede gültige GET-Anforderung 404 zurück, bis die FPC aktualisiert wird.

Der Beamte sagte, der Fehler sei in Magento 2.3.2 https://github.com/magento/magento2/issues/21299#issuecomment-485144642 behoben

Schlüssel Shang
quelle
2
Dies sollte die akzeptierte Antwort sein, da es sich bei der Frage speziell um 2.3 handelt. (Die anderen Antworten über URL-Umschreibungen können das gleiche Symptom verursachen, aber das gilt für alle Versionen und wird nicht durch das Löschen des Caches unterstützt.)
Scott Buchanan
3

Wir haben dieses Problem auch auf 3 separaten Installationen von Magento 2.3, alle auf verschiedenen Servern.

Dies ist erst seit dem Upgrade von 2.2.6 geschehen und scheint jeden Tag genau zum gleichen Zeitpunkt zu erfolgen (keine Fehler in den Protokollen).

Das Löschen des Caches behebt das Problem, jedoch nicht das Problem.

Dan
quelle
Haben Sie das genaue Problem gefunden?
Emipro Technologies Pvt. Ltd.
Nein, noch nicht, wir haben gerade eine geplante Aufgabe hinzugefügt, die jede Minute nach einem 404 sucht und den Cache aktualisiert, wenn er gefunden wird. Nicht ideal, aber die beste Lösung, die wir finden konnten. Dies geschah jedoch erst seit dem Upgrade auf Magento 2.3.
Dan
3

Wir stehen ebenfalls vor dem gleichen Problem und es muss noch im Detail getestet werden. Aber wir verwenden unten als vorübergehende Lösung

Ändern Sie die 'aroundDispatch'-Methode des Dateiherstellers / magento / module-page-cache / Model / App / FrontController / BuiltinPlugin.php wie unten beschrieben

public function aroundDispatch(
        \Magento\Framework\App\FrontControllerInterface $subject,
        \Closure $proceed,
        \Magento\Framework\App\RequestInterface $request
    ) {
        $this->version->process();
        if (!$this->config->isEnabled() || $this->config->getType() != \Magento\PageCache\Model\Config::BUILT_IN) {
            return $proceed($request);
        }
        $result = $this->kernel->load();
        if ($result === false || ($result instanceof ResponseHttp && $result->getStatusCode() == 404)) {
            $result = $proceed($request);
            if ($result instanceof ResponseHttp) {
                $this->addDebugHeaders($result);
                $this->kernel->process($result);
            }
        } else {
            $this->addDebugHeader($result, 'X-Magento-Cache-Debug', 'HIT', true);
        }
        return $result;
    }

Die Funktionsänderung ist: IF-Bedingung geändert von

if ($result === false) {

zu

if ($result === false || ($result instanceof ResponseHttp && $result->getStatusCode() == 404)) {

Diese Codeänderung ignoriert den gesamten Seitencache und erstellt ihn neu, wenn das im Cache gefundene Ergebnis 404 ist.

Ich hoffe das hilft.

Ravinder
quelle
2

Überprüfen Sie die Tabelle url_rewrite, geben Sie dort den leeren Eintrag request_path in die Homepage dieser Tabelle ein und entfernen Sie diesen Eintrag. Überprüfen Sie dann

php bin/magento cache:flush
php bin/magento cache:clean
Navin Bhudiya
quelle
Das haben wir schon überprüft. Wir erhalten jedoch keinen leeren request_path.
Emipro Technologies Pvt. Ltd.
1

Sieht so aus, als würde dies durch einen Magento 2-Cache-Fehler in mehreren Ansichten in mehreren Speicheransichten verursacht. Ich habe den Ganzseiten-Cache von env.php deaktiviert. Es scheint das Problem zu beheben. Müssen mehr debuggen, um herauszufinden.

Werdet euch bald aktualisieren.

Aktualisierung. fand das Problem. Dies liegt daran, dass Magento 2 keine HTTP-HEAD-Anforderungen verarbeitet. Wenn ein Bot mit einer HEAD-Typ-Anfrage auf die Website gelangt, gibt Magento 404 zurück und speichert sie zwischen. Die Lösung wie folgt:

From e3890bfda2d67508df76ce00cdd675c60743ace5 Mon Sep 17 00:00:00 2001
From: Siyu Qian <david@magebinary.com>
Date: Fri, 7 Jun 2019 15:17:40 +1200
Subject: [PATCH] BMQ-54 Full page cache issue

---
 .../Plugin/PreventCachingHead404ResultsPlugin.php  | 37 ++++++++++++++++++++++
 app/code/MageBinary/Theme/etc/di.xml               |  3 ++
 2 files changed, 40 insertions(+)
 create mode 100644 app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php

diff --git a/app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php b/app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php
new file mode 100644
index 0000000..a16ad17
--- /dev/null
+++ b/app/code/MageBinary/Theme/Plugin/PreventCachingHead404ResultsPlugin.php
@@ -0,0 +1,37 @@
+<?php
+namespace MageBinary\Theme\Plugin;
+
+class PreventCachingHead404ResultsPlugin
+{
+    /**
+     * @var \Magento\Framework\App\Request\Http
+     */
+    protected $request;
+
+    /**
+     * PreventCachingHeadRequestsPlugin constructor.
+     * @param \Magento\Framework\App\Request\Http $request
+     */
+    public function __construct(\Magento\Framework\App\Request\Http $request)
+    {
+        $this->request = $request;
+    }
+
+    /**
+     * Prevent caching HEAD requests that return a 404 result
+     * @param \Magento\Framework\App\PageCache\Kernel $subject
+     * @param callable $proceed
+     * @param \Magento\Framework\App\Response\Http $response
+     * @return void
+     */
+    public function aroundProcess(
+        \Magento\Framework\App\PageCache\Kernel $subject,
+        callable $proceed,
+        \Magento\Framework\App\Response\Http $response
+    ) {
+        if ($this->request->isHead() && $response->getHttpResponseCode() == 404) {
+            return;
+        }
+        return $proceed($response);
+    }
+}
\ No newline at end of file
diff --git a/app/code/MageBinary/Theme/etc/di.xml b/app/code/MageBinary/Theme/etc/di.xml
index 5dfebc7..7df8e7a 100644
--- a/app/code/MageBinary/Theme/etc/di.xml
+++ b/app/code/MageBinary/Theme/etc/di.xml
@@ -16,4 +16,7 @@
     </type>
     <preference for="Magento\Framework\Url\QueryParamsResolver" type="MageBinary\Theme\Url\QueryParamsResolver" />
     <preference for="Magento\CatalogWidget\Model\Rule\Condition\Product" type="MageBinary\Theme\CatalogWidget\Rule\Condition\Product" />
+    <type name="Magento\Framework\App\PageCache\Kernel">
+        <plugin name="prevent_caching_404_head_results" type="MageBinary\Theme\Plugin\PreventCachingHead404ResultsPlugin" />
+    </type>
 </config>
-- 
2.10.5
Adel Abula - MageBinary
quelle
Haben Sie auf der Startseite eine Lösung für das Problem mit dem Ganzseiten-Cache 404 gefunden? Ich habe die gleichen Probleme auf der Startseite, wo manchmal die Startseite 404 sein wird, und wenn ich den gesamten Seiten-Cache bereinige, funktioniert es gut.
Ajay
0

Wir stehen vor dem gleichen Problem. Die Startseite und einige andere Seiten geben zufällig 404 an. Nach dem Löschen des Seitencaches funktioniert dies einwandfrei. Es passiert eher zufällig - manchmal passiert es 4 Minuten lang direkt. Dann passiert es nicht für die nächsten 5 Stunden usw. Keine leeren request_paths in der url_rewrite-Tabelle. In unserem Fall trat das Problem auf, nachdem wir:

  • Magento 2.3.0 aktualisiert -> 2.3.1
  • Redis deaktiviert

Wird weiter untersuchen.

Raido
quelle
Hast du irgendwelche Neuigkeiten? Ich arbeite an Magento 2.3.1 und stehe vor dem gleichen Problem.
Plim
@Plim Ja. Es wurde in 2.3.2 behoben. Sie können entweder aktualisieren oder patchen. github.com/magento/magento2/issues/21299 Kurz gesagt: Die HEAD-Anforderung gibt 404 und auf verschiedenen Seiten an, und dann werden diese Seiten zwischengespeichert. Und bis Sie den Cache
leeren