Wir haben in unserem Verkaufskanal eine Route ohne Sprachkürzel entfernt und möchten nun alle Requests auf das jeweilige Sprachkürzel weiterleiten also z.B. „domain.com/produkt1 auf domain.com/de/produkt2“ weiterleiten. Da bei Löschung der Domain immer eine SalesChannelMappingException in RequestTransformer.php geworfen wird, habe ich den Service dekoriert um die Exception abzufangen. Ich schreibe dann eine Variable in den Request und lese diesen im Kernel Request Event wieder aus um eine Redirect Response zu senden. Das funktioniert aber nur, wenn caching deaktiviert ist, ansonsten kommt die Information nicht im Kernel Request Event an. Was kann ich hier tun?
P.S. Ich habe das auch über die .htaccess mit folgender Anweisung versucht, lande dann aber immer in einem redirect loop zur index.php
RewriteCond %{REQUEST_URI} !^/(de|en|es|fr|it)/
RewriteRule ^(.*)$ /de/$1 [L,R=302]
Doch noch lieber eine Tasse Kaffee… noch einmal gründlich überlegen… (auf mich, und nicht den Fragesteller bezogen).
Was willst du mir damit sagen? Ich komme aktuell nicht weiter, auch wenn das Problem trivial erscheint.
Das mit dem Kaffee war auf mich bezogen, da ich eine nicht wirklich sinnvolle Antwort geschrieben hatte, diese dann editiert.
Request_Uri beinhaltet den / nach der Domain, wenn ich mich nicht irre. Dann würdest du dadurch zu //de/ umleiten.
Okay alles klar, dann hatte ich das missverstanden 
Ja, der „/“ ist aber nicht das Problem. Die Weiterleitung funktioniert 1x, danach ein endless Loop nach /de/index.php.
Es hängt irgendwie mit der letzten Zeile von Shopware in der .htaccess zusammen:
# Rewrite all other queries to the front controller.
RewriteRule ^ %{ENV:BASE}/index.php [L]
Aber verstehe nicht, wieso der Request überhaupt dort ankommt.
Hat etwas gedauert, aber klar…
Du verhinderst damit jeglichen api Call der über /api läuft.
Du kannst also nicht per !^/(de|en|es|fr|it)/ abfragen.
Da musst du, wie Shopware auch, mit der index.php arbeiten und dort die Parameter nach dem ? auswerten.
Okay, danke für den Tipp. Ich habe es aber noch nicht ganz raus. Ich dachte immer der erste Request ist ohne index.php und den muss ich doch abfangen, um den Redirect zu erzeugen, sodass dann alles regulär abläuft. Wie soll ich das abfragen?
Konnte es jetzt so lösen:
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteCond %{HTTP_HOST} example
RewriteCond %{REQUEST_URI} !^/admin
RewriteCond %{REQUEST_URI} !^/bundles
RewriteCond %{REQUEST_URI} !^/api
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !^/(de|en|es|fr|it)/
RewriteRule ^(.*)$ /de/$1 [L,R=301]