Zur Navigation

Variablen Teilstring aus URL entfernen und umleiten

1 Karl99

Hallo,

ich bin gerade dabei, meinen kleinen Vereins-Shop zu aktualisieren und stehe dabei vor einem Problem.
In der bisherigen Shop-Software wurden die URLs wie folgt erzeugt:
http://www.domain.tld/kategorie-1/kategorie-2/kategorie-3/kategorie-4/9999/produkt-name

Nach dem (variablen) Kategoriepfad steht die Artikel-ID und dann erst im letzten Abschnitt des Pfads der Produktname.
Ggf. kann hinter dem letzten Abschnitt höchstens noch ein Querystring stehen.

Nach der Übernahme ins neue System hat sich die Artikel-ID geändert und ich lasse die URLs jetzt so aufbauen:
http://www.domain.tld/kategorie-1/kategorie-2/kategorie-3/kategorie-4/produkt-name

Jetzt die Frage:
Kann man per rewrite den Abschnitt mit der Artikel-ID entfernen, so dass die oben genannte URL zur letztgenannten wird?
Die Kategorietiefe vor der ID ist variabel. Die ID ist aber immer der vorletzte Abschnitt des Pfads. Die Länge der ID ist ebenfalls variabel von 1- bis 7-stellig.

Vielen Dank im Voraus für jede Hilfe.

Gruß
Karl

14.10.2014 11:47

2 Jörg

Du möchtest von den alten URLs auf die neuen weiterleiten, wenn ich dich richtig verstanden habe?

Das würde ich so probieren:

RewriteEngine on
RewriteRule ^(.+)/[0-9]{1-7}/([^/]+)$ http://example.com/$1/$2 [R=301,L]

14.10.2014 15:54 | geändert: 14.10.2014 15:54

3 Karl99

Hallo Jörg,

vielen Dank für Deine Antwort! Ja, Du hast das richtig verstanden. Die alte URL mit der ID im Pfad soll auf die neue URL ohne ID im Pfad umleiten.

Leider klappt es so aber nicht. Ich laufe nach wie vor in meine 404 Umleitung.

Muss ich mit den Klammern noch was beachten?

14.10.2014 16:04

4 Jörg

Wenn du noch andere Rewrite Rules verwendest, solltest du diese Weiterleitung möglichst weit nach oben schieben, damit vor der Weiterleitung kein Rewrite erfolgt.

Falls das nicht hilft:

welche URL hast du aufgerufen und zu welcher URL genau wirst du weitergeleitet?

14.10.2014 16:09

5 Karl99

Ich habe es derzeit hier lokal auf dem Mamp laufen ohne Zugriffsmöglichkeit von aussen.

Deine Zeile ist die zweite Zeile in der htaccess. Die erste ist RewriteEngine on.

Wenn ich aufrufe:
http://www.domain.tld/kategorie-1/kategorie-2/kategorie-3/kategorie-4/9999/produkt-name
bleibt das genau so in der Adresszeile des Browsers stehen und der Shop geht zu seiner Startseite. Diese ist innerhalb des Systems als Fallback eingestellt, wenn die aufgerufene URL nichts findet.

14.10.2014 17:20

6 Jörg

Ja, doofer Fehler meinerseits :-\ Minimum und Maximum im Quantor werden mit einem Komma getrennt, nicht mit einem Bindestrich, also {1,7}

So sollte es funktionieren:

RewriteRule ^(.+)/[0-9]{1,7}/([^/]+)$ http://example.com/$1/$2 [R=301,L]

14.10.2014 18:43

1 Forenmitglied fand diesen Beitrag gut

7 Karl99

Du bist mein Held! Ganz herzlichen Dank!

Bei der Gelegenheit bemerke ich wieder, wie dringend ich mich endlich mal mit RegEx beschäftigen müsste :-\

Danke danke danke!

14.10.2014 18:59

Beitrag schreiben (als Gast)

Beim Verfassen des Beitrages bitte die Forenregeln beachten.





[BBCode-Hilfe]