Seite 1 von 1

modrewrite für teil des dateinamens

Verfasst: 17.07.2010, 00:11
von YesNoCancel
Vielleicht hat jemand ne schlaue Idee, aktuell sehen die URLs so aus:

/shop/artikel,4,48484.html
/shop/artikel,4,48483.html
/shop/artikel,4,48482.html
/shop/artikel,4,48481.html
etc.

diese sollen künftig so aussehen:

/shop/artikel,0,48484.html
/shop/artikel,0,48483.html
/shop/artikel,0,48482.html
/shop/artikel,0,48481.html
etc.

Die Idee war:
RewriteRule ^/shop/artikel,0,(.+)\.html$ /shop/artikel,4,$1\.html [R=301]

Funzt nur nicht, wo ist der Denkfehler?

Verfasst:
von

Verfasst: 17.07.2010, 00:15
von chris21
Ok.

Da will jemand von Hamburg nach München fahren und Du sollst ihm per Schild den Weg zeigen.

Also stellst Du in München ein Schild auf, wie er nach Hamburg fahren kann?

Wird ihm das helfen?

Verfasst: 17.07.2010, 00:36
von YesNoCancel
Ich verstehe, worauf Du hinaus willst, aber Deine Metapher ist schlecht. Ich zeige ihm in München ein Schild von Deutschland mit zwei Punkten: München, Hamburg. Eh voila, chch.

D.h. die Alternative, für jeden Artikel einen eigenen Redirect 301?

Redirect 301 shop/artikel,4,48484.html https://www.domain.tld//shop/artikel,0,48484.html

Puh, das werden dann locker 150.000 Stück, hat der Server kräftig was zu tun bei jedem Aufruf.

Verfasst: 17.07.2010, 04:22
von daniel5959
Hallo,

bin jetzt kein rewrite-Experte, aber kann es sein, dass 0 und 4 nur getauscht werden müssen?

daniel5959 :)

Verfasst: 17.07.2010, 08:39
von Synonym
Du hast Chris nicht verstanden:
Ich zeige ihm in München ein Schild von Deutschland mit zwei Punkten: München, Hamburg. Eh voila, chch.
Und was soll das bringen, wenn derjenige in Hamburg steht? Du sollst den Weg von Hamburg nach München zeigen, nicht umgekehrt.

warum 150.000 Stück? Dreh die Rule doch einfach nur um.

RewriteRule ^/shop/artikel,4,(.+)\.html$ /shop/artikel,0,$1.html [R=301,L]

Leitet weiter von 4 nach 0. Ob Dein Script damit dann was anfangen kann weiß ich nicht.

Re: modrewrite für teil des dateinamens

Verfasst: 17.07.2010, 08:48
von profo
YesNoCancel hat geschrieben:Die Idee war:
RewriteRule ^/shop/artikel,0,(.+)\.html$ /shop/artikel,4,$1\.html [R=301]
Von der Syntax her sieht das eigentlich ok aus, bis auf den Backslash auf der rechten Seite und vermutlich ein "L"ast-Statement:
RewriteRule ^/shop/artikel,0,(.+)\.html$ /shop/artikel,4,$1.html [R=301,L]

Und wenn Du "Rewritebase /" gesetzt hast ist der Slash am Anfang zu viel:
RewriteRule ^shop/artikel,0,(.+)\.html$ shop/artikel,4,$1.html [R=301,L]

Abgesehen davon sieht das ja eher nach einer technischen Änderung aus, brauchst Du da wirklich einen 301 oder reicht nicht ein serverinternes Umschreiben der URL?
RewriteRule ^shop/artikel,0,(.+)\.html$ shop/artikel,4,$1.html [L]

Verfasst: 17.07.2010, 11:45
von YesNoCancel
Servus,

besten Dank für die Tipps. Da hab ich Chris tatsächlich falsch verstanden, war wohl schon spät ;-)

Zum Code:
^shop/artikel,0,(.+)\.html$ shop/artikel,4,$1.html [L]

Klingt gut, funktioniert nur leider nicht - d.h. die url wird trotzdem als /shop/artikel,4,48481.html ausgegeben, statt /shop/artikel,0,48481.html

Code: Alles auswählen

#
# rewrite-regeln
#
RewriteEngine on
RewriteBase /

RewriteCond %{QUERY_STRING} PHPSESSID 
RewriteRule ^(.*)$ $1? [R=301]

RewriteRule ^shop/artikel,4,(.+)\.html$ shop/artikel,0,$1.html [L] 

Verfasst: 17.07.2010, 12:02
von Synonym
Du musst Dich nun mal entscheiden. Willst Du die URL intern umschreiben oder sichtbar weiterleiten???

Damit schreibst Du nur intern um

Code: Alles auswählen

RewriteRule ^shop/artikel,0,(.+)\.html$ shop/artikel,4,$1.html [L] 
von 0 nach 4. Was aber schwachsinnig ist, da Du sicherlich keine Datei im Filesystem hast die so heißt "shop/artikel,4,$1.html", oder?

Damit leitest zu weiter:

Code: Alles auswählen

RewriteRule ^shop/artikel,4,(.+)\.html$ shop/artikel,0,$1.html [R=310,L] 
von 4 nach 0

Und, Dein .htaccess-Code da oben wird gar nicht funktionieren, da das "RewriteRule" fehlt.

Verfasst: 17.07.2010, 12:11
von YesNoCancel
Mal wieder bewiesen, never work on weekend. Starker Kaffee intus und alles klappt. Danke für die Idioten-Nachhilfe, wenns mal wieder länger dauert ...