Hallo zusammen, wir stehen kurz vor einem Systemwechsel von XTC zu Shopware 5. Nun möchten wir die alten URL’s als 301 weiterleiten. Da es sich um ca 600 Produkte in jeweils 5 Sprachen handelt, soll die Weiterleitung per regex erfolgen. Eine alte Produkt URL sieht so aus: http://www.domain.de/products/de/Kategorie/Produkt.html
Die neue Shopware URL so: http://www.domain.de/de/kategorie/produkt
Das .html haben wir in der .htaccess so entfernt RewriteRule ^(.\*)\.html$ /$1 [L]
Das products so: RewriteRule ^products/(.+?)(-[0-9]+)?$ /$1 [L,R=301]
Jetzt bleibt nur noch die Umwandlung der Großbuchstaben in Kleinbuchstaben übrig. Dazu habe ich im Netz folgendes gefunden, was auch funktioniert: RewriteRule ![A-Z] - [S=26] RewriteRule (.\*)A(.\*) $1a$2 [N,DPI,E=lc:yes] RewriteRule (.\*)B(.\*) $1b$2 [N,DPI,E=lc:yes] RewriteRule (.\*)C(.\*) $1c$2 [N,DPI,E=lc:yes] RewriteRule (.\*)D(.\*) $1d$2 [N,DPI,E=lc:yes] RewriteRule (.\*)E(.\*) $1e$2 [N,DPI,E=lc:yes] RewriteRule (.\*)F(.\*) $1f$2 [N,DPI,E=lc:yes] RewriteRule (.\*)G(.\*) $1g$2 [N,DPI,E=lc:yes] RewriteRule (.\*)H(.\*) $1h$2 [N,DPI,E=lc:yes] RewriteRule (.\*)I(.\*) $1i$2 [N,DPI,E=lc:yes] RewriteRule (.\*)J(.\*) $1j$2 [N,DPI,E=lc:yes] RewriteRule (.\*)K(.\*) $1k$2 [N,DPI,E=lc:yes] RewriteRule (.\*)L(.\*) $1l$2 [N,DPI,E=lc:yes] RewriteRule (.\*)M(.\*) $1m$2 [N,DPI,E=lc:yes] RewriteRule (.\*)N(.\*) $1n$2 [N,DPI,E=lc:yes] RewriteRule (.\*)O(.\*) $1o$2 [N,DPI,E=lc:yes] RewriteRule (.\*)P(.\*) $1p$2 [N,DPI,E=lc:yes] RewriteRule (.\*)Q(.\*) $1q$2 [N,DPI,E=lc:yes] RewriteRule (.\*)R(.\*) $1r$2 [N,DPI,E=lc:yes] RewriteRule (.\*)S(.\*) $1s$2 [N,DPI,E=lc:yes] RewriteRule (.\*)T(.\*) $1t$2 [N,DPI,E=lc:yes] RewriteRule (.\*)U(.\*) $1u$2 [N,DPI,E=lc:yes] RewriteRule (.\*)V(.\*) $1v$2 [N,DPI,E=lc:yes] RewriteRule (.\*)W(.\*) $1w$2 [N,DPI,E=lc:yes] RewriteRule (.\*)X(.\*) $1x$2 [N,DPI,E=lc:yes] RewriteRule (.\*)Y(.\*) $1y$2 [N,DPI,E=lc:yes] RewriteRule (.\*)Z(.\*) $1z$2 [N,DPI,E=lc:yes] RewriteCond %{ENV:lc} ^yes$ RewriteRule (.\*) /$1 [L]
Allerdings gibt jetzt das Backend nur eine weiße Seite aus. Entfernen wir den Teil, der die Großbuchstaben umwandelt ist das Backend erreichbar. Gibt es eine Möglichkeit diesen Teil des Rewrites nur auf das Frontend zu beschränken? Alle Regeln zusammen sind so in der .htaccess eingetragen: RewriteEngine on RewriteBase / RewriteRule ![A-Z] - [S=26] RewriteRule (.\*)A(.\*) $1a$2 [N,DPI,E=lc:yes] RewriteRule (.\*)B(.\*) $1b$2 [N,DPI,E=lc:yes] RewriteRule (.\*)C(.\*) $1c$2 [N,DPI,E=lc:yes] RewriteRule (.\*)D(.\*) $1d$2 [N,DPI,E=lc:yes] RewriteRule (.\*)E(.\*) $1e$2 [N,DPI,E=lc:yes] RewriteRule (.\*)F(.\*) $1f$2 [N,DPI,E=lc:yes] RewriteRule (.\*)G(.\*) $1g$2 [N,DPI,E=lc:yes] RewriteRule (.\*)H(.\*) $1h$2 [N,DPI,E=lc:yes] RewriteRule (.\*)I(.\*) $1i$2 [N,DPI,E=lc:yes] RewriteRule (.\*)J(.\*) $1j$2 [N,DPI,E=lc:yes] RewriteRule (.\*)K(.\*) $1k$2 [N,DPI,E=lc:yes] RewriteRule (.\*)L(.\*) $1l$2 [N,DPI,E=lc:yes] RewriteRule (.\*)M(.\*) $1m$2 [N,DPI,E=lc:yes] RewriteRule (.\*)N(.\*) $1n$2 [N,DPI,E=lc:yes] RewriteRule (.\*)O(.\*) $1o$2 [N,DPI,E=lc:yes] RewriteRule (.\*)P(.\*) $1p$2 [N,DPI,E=lc:yes] RewriteRule (.\*)Q(.\*) $1q$2 [N,DPI,E=lc:yes] RewriteRule (.\*)R(.\*) $1r$2 [N,DPI,E=lc:yes] RewriteRule (.\*)S(.\*) $1s$2 [N,DPI,E=lc:yes] RewriteRule (.\*)T(.\*) $1t$2 [N,DPI,E=lc:yes] RewriteRule (.\*)U(.\*) $1u$2 [N,DPI,E=lc:yes] RewriteRule (.\*)V(.\*) $1v$2 [N,DPI,E=lc:yes] RewriteRule (.\*)W(.\*) $1w$2 [N,DPI,E=lc:yes] RewriteRule (.\*)X(.\*) $1x$2 [N,DPI,E=lc:yes] RewriteRule (.\*)Y(.\*) $1y$2 [N,DPI,E=lc:yes] RewriteRule (.\*)Z(.\*) $1z$2 [N,DPI,E=lc:yes] RewriteCond %{ENV:lc} ^yes$ RewriteRule (.\*) /$1 [L] RewriteRule ^(.\*)\.html$ /$1 [L] RewriteRule ^products/(.+?)(-[0-9]+)?$ /$1 [L,R=301] # Https config for the backend #RewriteCond %{HTTPS} !=on #RewriteRule backend/(.\*) https://%{HTTP\_HOST}%{REQUEST\_URI} [L,R=301] RewriteRule shopware.dll shopware.php RewriteRule files/documents/.\* engine [NC,L] RewriteRule backend/media/(.\*) media/$1 [NC,L] RewriteCond %{REQUEST\_URI} !(\/(engine|files|templates)\/) RewriteCond %{REQUEST\_URI} !(\/media\/(archive|banner|image|music|pdf|unknown|video)\/) RewriteCond %{REQUEST\_FILENAME} !-f RewriteCond %{REQUEST\_FILENAME} !-d RewriteRule ^(.\*)$ shopware.php [PT,L,QSA]
Gruß und schönes WE
Müsste dazu nicht einfach die Backend Rewrite Rule VOR die Einträge mit den Buchstaben?
Ich habe diesen Teil RewriteRule shopware.dll shopware.php RewriteRule files/documents/.\* engine [NC,L] RewriteRule backend/media/(.\*) media/$1 [NC,L] RewriteCond %{REQUEST\_URI} !(\/(engine|files|templates)\/) RewriteCond %{REQUEST\_URI} !(\/media\/(archive|banner|image|music|pdf|unknown|video)\/) RewriteCond %{REQUEST\_FILENAME} !-f RewriteCond %{REQUEST\_FILENAME} !-d RewriteRule ^(.\*)$ shopware.php [PT,L,QSA]
mal ganz an den Anfang gestellt. Das hatte aber nur den Effekt, dass das Backend trotzdem nicht funktioniert hat und die Frontendweiterleitungen ebenfalls nicht. Ich denke, die Umwandlung von Groß- in Kleinbuchstaben darf beim Backendaufruf nicht greifen, da dort halt einige Aufrufe mit “…/Shopware/…” sind.
Du könntest probieren eine Condition vor jede der Groß/Klein Rewrites zu stellen RewriteCond %{REQUEST\_URI} !(\/(backend)\/)