Landingpage Fehler : Status Code 301

Shopware 5.1.1., Responsive Template

Erhalten die folgende Fehlermeldung bei Aufruf einer Landingpage. Aber nicht beim erstmaligen Aufruf sondern in unregelmäßigen Abständen. Hinweis: Nach dem Löschen des Caches wird die Landingpage wieder geladen. Die Landingpage ist eine Einkaufswelt mit einem Artikelslider. Vielleicht gibt es jemanden dem die folgende Fehlermeldung bereits bekannt vorkommt und uns einen Hinweis geben kann, in welchem Bereich wir auf die Suche gehen sollen. Shopware Bug, Berechtigungsproblem, … ? 

 

FEHLER im phperror.log:

PHP Fatal error:  Uncaught exception ‘RuntimeException’ with message ‘Error when rendering “https://www.bringts.at/shopware.php/?action=info&controller=checkout&module=widgets” (Status code is 301).’ in /var/www/vhosts/bringts.at/htdocs/vendor/symfony/http-kernel/HttpCache/Esi.php:282
Stack trace:
#0 /var/www/vhosts/bringts.at/htdocs/var/cache/production_201510221322/html/en/b9/28/c22031894631a894ee64b7a8c639ca14eb0e30fbfdb7747686f6041950d3(181): Symfony\Component\HttpKernel\HttpCache\Esi->handle(Object(Shopware\Components\HttpCache\AppCache), ‘/shopware.php/?..’, ‘’, false)
#1 /var/www/vhosts/bringts.at/htdocs/vendor/symfony/http-kernel/HttpCache/HttpCache.php(646): include(’/var/www/vhosts…’)
#2 /var/www/vhosts/bringts.at/htdocs/vendor/symfony/http-kernel/HttpCache/HttpCache.php(216): Symfony\Component\HttpKernel\HttpCache\HttpCache->restoreResponseBody(Object(Symfony\Component\HttpFoundation\Request), Object(Symfony\Component\HttpFoundation\Response))
#3 /var/www/vhosts/bringts.at/htdocs/engine/Shopware/Components/HttpCa in /var/www/vhosts/bringts.at/htdocs/vendor/symfony/http-kernel/HttpCache/Esi.php on line 282

Hallo,

du hast in deinem Template ein Action Widget, welches nicht kompatibel mit den Landinpages ist. In der Regel werden solche Widgets durch Plugins und individuelle Anpassungen am Template eingebunden. Das macht die Fehlersuche i.d.R. relativ schwer. Du müsstest mal schauen ob du den Fehler bewusst reproduzieren kannst und dann einmal nach und nach die Plugins deaktivieren.

Moritz

In der Landing Page ist der Standard Artikelslider von Shopware eingebunden. 

Kann man eine Landingpage vom Shopware Caching ausnehmen?

Hi,

Landingpages laufen über den „campaign“-Controller, entsprechend musst du diesen Eintrag aus der Cache-Whitelist entfernen:

Das löst ja vermutlich nicht das zu Grunde liegende Problem - aber so ad hoc sehe ich jetzt auch nicht, was da bei dir falsch läuft.

Daniel

1 „Gefällt mir“

Danke für die Information

Durch das Abschalten des Caches für die Landingpage ist nun der Fehler nicht mehr aufgetreten.

Wir haben den gleichen Fehler, erst durch Abschalten des Chaches für das o.g. Element ist der Fehler behoben. Zum Zeitpunkt war lediglich 1 html widget aktiv.

Wir hatten den Fehler auch gerade, haben allerdings den Referer (sprich die Seite, auf der der User ist wenn das Widget geladen werden soll) als Fehler identifiziert.

Der 301-Redirect tritt wegen /shopware.php/ in der URL auf, der Redirect geht auf die selbe URL aber ohne das /shopware.php/ (was auch funktioniert). Der Grund, warum shopware.php in der URL war war der Referer, aus den Benachrichtigungs-Emails (wenn Artikel wieder Bestand bekommen) wurden Artikel-Links verschickt, die dieses shopware.php enthielte. Das haben wir jetzt auf SEO-URLs umgestellt und seit dem kommen die Fehler nicht mehr.

1 „Gefällt mir“

Hallo Oli,

boahh… da wäre ich nie darauf gekommen. Kannst du mir noch verraten wie ihr die Email Variablen auf SEO-URLs umgestellt habt? Ich hab schon im ganzen Netz danach gesucht, aber leider nichts dazu gefunden :open_mouth:

Leider habe ich meinem Emailtemplate nur {$sArticleLink} - der Name wird nicht ausgegeben :frowning: - sonst hätte ich es so umgeschrieben.

Vielen Dank für deine Hilfe

Herzliche Grüße
Claudia

Hi Claudia,

dazu muss man leider im Code werkeln. War bei uns nicht so tragisch, da wir diese Emails mit ein bischen mehr Logik ausgestattet haben und das Versenden eh schon über ein eigenes Plugin passiert, das wir problemlos modifizieren konnten. Die betreffende Stelle in Shopware ist in der Datei engine/Shopware/Plugins/Default/Frontend/Notification/Bootstrap.php Um die Zeile 297 sieht das etwa so aus:

                $context = [
                    'sArticleLink' => $data['shopLink'] . "?sViewport=detail&sArticle=$sArticleID",
                    'sOrdernumber' => $ordernumber,
                    'sData' => $job['data'],
                ];

In unserem Plugin erzeugen wir die URL jetzt folgendermaßen:

$context = [
    'sArticleLink' => Shopware()->Front()->Router()->assemble([
        'module' => 'frontend',
        'controller' => 'detail',
        'action' => 'index',
        'sArticle' => $sArticleID,
    ]),
    'sArticleName' => $sArticle['name'],
    'sOrdernumber' => $ordernumber,
];

Da das ganze aber per Cronjob ausgeführt wird, muss man Shopware davor erst initialisieren, das machen wir folgendermaßen:

// build shop context for router to assemble seo urls
$repository = Shopware()->Container()->get('models')->getRepository('Shopware\Models\Shop\Shop');
$shop = $repository->getActiveById($shopId); // registerResources();
$context = Context::createFromShop($shop, Shopware()->Container()->get('config'));
Shopware()->Container()->get('router')->setContext($context);

Eine alternative Lösung wäre vielleicht, zu suchen, wo “shopLink” gespeichert wird (passiert, wenn sich ein Benutzer für diese Email registriert). Da wäre man in einem Shop-Context und könnte die URL gleich sauber in die Datenbank speichern.

1 „Gefällt mir“