Seite 1 von 1

Mit mod rewrite Zahl umsetzen

Verfasst: 13.12.2009, 09:20
von sumacrusader
Hallo

ich habe folgendes Problem.

Ich möchte vorhandene URLs auf neue weiterleiten, also die URL Struktur ändern und dabei eine zahl ersetzen

die vorhanden URLs sehen so aus

domain/cat1/cat2-zahl/artikelname.html

die neue URL soll so aussehen
domain/cat1/cat2/artikelname-zahl.html

Ich habe mich schon durch die diversen Tutorials zu mod rewrite gewühlt, ich blicke es aber nicht. Wäre dankbar wenn mir jemand einen Tipp dazu geben könnte

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Re: Mit mod rewrite Zahl umsetzen

Verfasst: 13.12.2009, 11:10
von Mork vom Ork
sumacrusader hat geschrieben:Ich möchte vorhandene URLs auf neue weiterleiten, also die URL Struktur ändern und dabei eine zahl ersetzen
Du möchtest eine externe, für den Browser sichtbare Weiterleitung?
die vorhanden URLs sehen so aus

domain/cat1/cat2-zahl/artikelname.html

die neue URL soll so aussehen
domain/cat1/cat2/artikelname-zahl.html
In etwa so:

RedirectMatch permanent ^/([^/]+)/([^/]+)-([0-9]+)/(.+)\.html$ /$1/$2/$4-$3.html

^ Anfang des zu vergleichenden Textes
[^/]+ Ein oder mehrere (+) Zeichen, die kein Schrägstrich sind ([^/])
[0-9]+ Ein oder mehrere (+) Zeichen von 0 bis 9 ([0-9])
.+ Ein oder mehrere (+) Zeichen beliebiger Natur (.)
$ Ende des zu vergleichenden Textes

Die runden Klammern um die bunten Teile sorgen dafür, dass der jeweilige Inhalt gespeichert und im Ziel über die Variablen $1 bis $9 (in diesem Fall natürlich nur bis $4, da nur vier Klammern) abrufbar ist.
Ich habe mich schon durch die diversen Tutorials zu mod_rewrite gewühlt
Probiere ist mit Anleitungen zu PCRE (Perl-compatible Regular Expressions), das ist die Bibliothek, die unter anderem von mod_rewrite und mod_alias (RedirectMatch) für die Musteranalyse genutzt wird, zum Beispiel unter https://docs.python.org/3.1/library/re. ... ion-syntax oder https://de.php.net/manual/de/reference. ... syntax.php (beide leider nur auf Englisch). Am Ende von https://en.wikipedia.org/wiki/PCRE findest du Windows-Hilfedateien dazu (auch auf Englisch).
PCRE bildet die Musteranalyse von Perl nach, die Perl-Dokumentation dazu findest du unter https://perldoc.perl.org/perlre.html

Verfasst: 13.12.2009, 12:56
von sumacrusader
Danke Mork vom Ork, dass sieht schon sehr gut aus :D ich werde es mal probieren.

Jetzt stellt sich noch die Frage ob ich das auch als 301 Umleitung mit
RewriteRule ^/([^/]+)/([^/]+)-([0-9]+)/(.+)\.html$ /$1/$2/$4-$3.html [R=301,L]

oder ist dieses RedirectMatch permanent identsich mit einer 301 Umleitung?

nochmal danke :D

Verfasst: 13.12.2009, 13:32
von sumacrusader
Das mit dem RedirectMatch permanent klappt nur jetzt habe ich das nächste Problem, manche URLs haben nur cat1

die sehen dann so aus
domain/cat1-zahl/artikelname.html

jetzt habe ich versucht das einfach entsprechend umzubauen
RedirectMatch permanent ^/([^/]+)-([0-9]+)/(.+)\.html$ /$1/$3-$2.html

die zeile habe ich zusätzlich eingefügt das mag er aber wohl nicht :crazyeyes:

Verfasst: 13.12.2009, 16:30
von Mork vom Ork
sumacrusader hat geschrieben:ist dieses RedirectMatch permanent identsich mit einer 301-Umleitung?
Nein, das ist nicht identisch, das ist eine.

Eine „301-Umleitung“ wird vom Webserver mit der Zeile HTTP/1.0 301 Moved Permanently angekündigt. Die 301 ist die Nummer der Meldung Moved Permanently, daher lässt sich bei RedirectMatch statt der Zahl 301 auch das Wort permanent als Argument übergeben. Am Ende kommt aber immer die gleiche, oben erwähnte Antwortzeile raus, auch wenn statt RedirectMatch RewriteRule mit Option [R=301] genutzt wird (oder PHP, ein CGI-Skript, …).

RedirectMatch schleppt gegenüber RewriteRule nicht die monströse mod_rewrite-Maschinerie mit sich, die zwar vieles ermöglicht, aber dann selbst für so einen kleinen Umbau noch fünf, sechs Arbeitsschritte benötigt. Von daher sind die Anweisungen Redirect bzw. RedirectMatch in solchen Fällen zu bevorzugen.
RedirectMatch permanent ^/([^/]+)-([0-9]+)/(.+)\.html$ /$1/$3-$2.html

die zeile habe ich zusätzlich eingefügt das mag er aber wohl nicht
Ich kann dich zumindest insofern beglückwünschen als dass sie hier tut, was sie soll. Was tut sie denn bei dir? Fehlermeldung? Bei welchen URLs? Wie sieht deine komplette .htaccess aus?

Verfasst: 13.12.2009, 16:46
von sumacrusader
nö da kommt keine fehlermeldung der leitet einfach auf die startseite um und sagt Seite nicht gefunden.

wie gesagt das soll ja so aussehen
domain/cat1-zahl/artikelname.html -> domain/cat1/artikelname-zahl.html

ich habe gedacht das geht so
RedirectMatch permanent ^/([^/]+)-([0-9]+)/(.+)\.html$ /$1/$3-$2.html

ich habe da nur einen Teil von dem redirect mit 2 cats weg gemacht, weil dein Code ja klappte, nur meiner funzt halt nicht