301 Weiterleitung per .htaccess

hankfromhelvete

RaR 2012
ID: 248446
L
16 Januar 2007
4.971
188
Ich suche nach einer Möglichkeit eine URL im dem Format:

HTML:
https://www.domain.com/Konsolen-Games/Sony-PSP-3000/Hardware/SONY-PSP-Konsole-Base-Pack-3004-schwarz::992.html

per RewriteRule auf

HTML:
https://www.domain.com/shopware.php/sViewport,search?sSearch=SONY+PSP+Konsole+Base+Pack+3004+schwarz

umzuleiten.

Also immer den Teil zwischen dem letzten / und :: als Parameter an die neue URL hängen. Zusätzlich soll aus - ein + werden.

Ich hab es zwar schon so hinbekommen, dass mit

Code:
RewriteRule (.*)::(.+)\.html$ https://www.domain.com/shopware.php/sViewport,search?sSearch=$1 [R=301,L]

auf

HTML:
https://www.domain.com/shopware.php/sViewport,search?sSearch=/Konsolen-Games/Sony-PSP-3000/Hardware/SONY-PSP-Konsole-Base-Pack-3004-schwarz

weitergeleitet wird, aber das bringt mir leider nichts.

Hat jemand eine Idee wie ich das hinbekomme?


/edit
Ein Problem wäre gelöst. Hab jetzt in der .htaccess

Code:
RewriteRule ^Konsolen-Games/Sony-PSP-3000/Hardware/(.*)::(.+)\.html$ https://www.domain.com/shopware.php/sViewport,search?sSearch=$1 [L,R=301]

Ergebnis ist dann das hier:

HTML:
https://www.domain.com/shopware.php/sViewport,search?sSearch=SONY-PSP-Konsole-Base-Pack-3004-schwarz

Jetzt muss nur noch aus "SONY-PSP-Konsole-Base-Pack-3004-schwarz" "SONY+PSP+Konsole+Base+Pack+3004+schwarz".
 
Zuletzt bearbeitet:
Ich bin mir nicht sicher, ob es tatsächlich eine Möglichkeit gibt, mit vertretbarem Aufwand alle - durch + zu ersetzen.
Was mir als Quick & Dirty Lösung aber einfällt, ist, alle Requests auf ein (PHP-) Script weiterzuleiten (muss ja nicht mal ein externer Redirect sein) und mit diesem dann die URL zu parsen und die Weiterleitung auszugeben.
 
Grundkonzept wäre sowas:
Code:
(?:([^-]+-)*([^-]+))
die Frage is nur, wie man eine variable Anzahl von Capture-Groups anspricht... und ob das überhaupt geht :think:
 
müsste mit rekursiven internen redirects funktionieren.

erst aus der ursprungs-URL ein - replacen, intern redirecten (RewriteRule [N]), das nächste - replacen usw.
Wenn kein - mehr gefunden wird, rewriten und 301 senden.

Achtung, hiermit kann man schnell ne endlosschleife bauen sich schnell den Apachen und/oder den kompletten Server killen!
Zur Performance sag ich mal nix :)
 
Grundkonzept wäre sowas:
Code:
(?:([^-]+-)*([^-]+))
die Frage is nur, wie man eine variable Anzahl von Capture-Groups anspricht... und ob das überhaupt geht :think:

Also ich hab das jetzt mal so probiert:
Code:
RewriteRule ^Konsolen-Games/Sony-PSP-3000/Hardware/(?:([^-]+-)*([^-]+))\.html$ https://www.domain.com/shopware.php/sViewport,search?sSearch=$1 [L,R=301]

Dann komme ich auf:
https://www.domain.com/shopware.php/sViewport,search?sSearch=3004-

:think:

Problem ist auch, dass die URLs alle unterschiedlich aufgebaut sind. Also z.B.
Code:
https://www.domain.com/Kategorie/Kategorie/Kategorie/Text-Text-Text-Text-Text-Text-Text::ID.html

Code:
https://www.domain.com/Kategorie/Kategorie/Kategorie/Text::ID.html

Code:
https://www.domain.com/Kategorie/Kategorie/Text-Text-Text-Text::ID.html

Das macht es wahrscheinlich nicht einfacher.

Ich weiß auch nicht, ob das überhaupt sinnvoll ist, auf die Suche zu verlinken. Die Kategorien selbst hab ich alle "manuell" rewritet, also jede URL einzeln in der .htaccess eingetragen. Bei den Artikeln selbst, wäre das mit ~1000 URLs zwar eine riesen Arbeit, aber wenn es sich lohnt, wäre das eine Alternative.

Kann das zu Problemen führen, wenn ich >1000 URLs nach dem Chema in der .htaccess eintrage?

Code:
Redirect 301 /Computer-Buero:::4.html https://www.domain.com/computer
 
Was spricht gegen die Alternative, alle Anfragen auf ein PHP-Script umzuleiten und von dort dann die externe Umleitung vorzunehmen?