Wenn alte Projekte einem Relaunch unterzogen werden, steht in irgend einer Projektphase der Punkt „Alte URLs weiterleiten“ an. Hierbei werden die wichtigsten (oder vielleicht auch alle) alten Links auf die künftigen neuen Adressen für einen Redirect 301 vorbereitet. In diesem Fall handelte es sich um eine recht lange und kryptische URL-Struktur des bis dato verwendeten Content Management Systems, die in etwa folgendes (gekürztes) Aussehen hatte:
Die URL www.domain.tld/CMS-Name/cfmod_index.asp?Template=5&level1=88&level2=89 sollte mit der anstehenden Live-Schaltung auf www.domain.tld/nice-url-artikel.html umleiten, was mit dieser Rewrite Rule in der project_vhost.conf – mit einer klassischen htaccess-Datei funktioniert das natürlich auch – realisiert wurde.
RewriteEngine On RewriteCond %{REQUEST_URI} ^/cms/cfmod_index.asp [NC] RewriteCond %{QUERY_STRING} ^Template=5&level1=88&level2=89$ [NC] RewriteRule ^(.*)$ http://www.domain.tld/nice-url-artikel.html? [L,R=301]
Was passiert in diesem Apache-Vierzeiler?
Nach dem Aktivieren der Rewrite Engine, wird in der 2. Zeile wird nach der angefragten URI %{REQUEST_URI}, also nach allem was vor dem ersten Parameter in der URL steht, gesucht. In Zeile 3 werden die Parameter %{QUERY_STRING}) innerhalb der URL ermittelt. Es findet keine Unterscheidung zwischen Groß- und Kleinschreibung statt [NC].
In der 4. Zeile erfolgt die 301er Weiterleitung R=301. Wichtig bei dieser Rewrite Rule ist das ? am Ende der Ziel-URL, da ansonsten die Parameter aus dem vorherigen Query String an die neue Adresse angehangen werden.
Im mod_rewrite Forum werden noch unzählige weitere Fragen zu Rewrite Conditions und Rewrite Rules behandelt. Auf www.redirect301.de poste ich lediglich Beispiele, die ich selbst im Einsatz bzw. mich intensiver mit befasst habe.
Fragen, Ergänzungen oder Meinungen zu der hier vorgestellten Weiterleitungs-Regel können gern auch hier besprochen/ kommentiert werden. Ansonsten nutzt bitte das Forum!
Wie behandel ich denn beispielweise folgende URLs:
www.domain.com/content/index.php?content=kontakt
soll nun auf:
www.domain.com/kontakt
weitergeleitet werden.
Wenn es nur die eine URL ist, dann würde ich (ungetestet) in etwa die folgende Regel verwenden.
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/content/index.php?content=kontakt$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/kontakt? [L,R=301]
Hallo Daniel,
Dein Artikel ist schon etwas älter, ich hoffe, du antwortest trotzdem.
Wie leite ich alte URL mit Hashtag/Sprungmarke auf nice URL ohne Hashtag um?
alte URL: www.domain.tld/kategorie/produkt/#sprungmarke
umleiten auf: www.domain.tld/nice-url-artikel/
Geht das in der htaccess ohne dass die Sprungmarke in der neuen URL angehängt wird?
Geht das auch mit dem Fragezeichen in der vierten Zeile?
Vielen Dank im Voraus!
Hannes
Eine #sprungmarke kannst du nicht umleiten. Zumindest nicht per Header (in der .htaccess).
Per PHP oder JavaScript lässt sich das sicher machen. Dafür habe ich aber kein Script parat. Solltest bei Google zu einer Suche nach „anchor redirect“ sicher/hoffentlich fündig werden.
Hallo und danke für den Artikel. Ich habe viel gegooglet, finde für mein Problem aber keine Lösung.
Wie ist es möglich für JEDE URL eine Weiterleitung einzureichen und für jede URL den kompletten Teil zwischen Domain und Artikeltitel zu entfernen?
Beisipel:
1) abc.de/kategorie/tiere/die-tollsten-tiere.html
2) abc.de/kategorien/hunde/die-tollsten-hunde.html
3) abc.de/blog/beitraege/highlight/beitrag1234.html
Wie kann ich hier alle Teile zwischen Domain und Artikelbezeichnung entfernen sodass immer auf abc.de/die-tollsten-tiere.html, abc.de/die-tollsten-hunde.html bzw. abc.de/beitrag1234.html weitergeleitet wird?