Beitrag wurde zuletzt am aktualisiert

Parameterreiche URL auf Nice-URL umleiten

Dynamische URL auf lesbare URL umleiten

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!

5 Kommentare zu "Parameterreiche URL auf Nice-URL umleiten"

  1. 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]

  2. 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.

  3. 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?

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.