Mit Modrewrite neue URL erstellen und dorthin weiterleiten

21.10.2009 In einem Blogbeitrag vor zwei Jahren hatte ich erklärt, dass Umschreiben von und Weiterleiten auf URLs zwei Paar Schuhe sind: bei ersterem wird unter einer neuen, statischen URL der Inhalt einer alten, dynamischen URL verfügbar gemacht, bei zweiterem wird der Browser auf eine andere URL verwiesen.

Manche wollen nun beides: 1. die URLs ihrer Website umschreiben und 2. anschließend auf die auf diese Weise neu generierten URLs weiterleiten, damit Linkpopularität / PageRank der alten URLs sich auf die neuen URLs vererben, wenn externe Links noch auf erstere verweisen. Die folgende Rule beispielsweise macht den Inhalt von example.org/index.php?foo=bar unter der statischen URL example.org/foo-bar verfügbar:

RewriteRule ^foo-(.+)$ index.php?foo=$1

Eine Weiterleitung in umgekehrter Richtung von example.org/index.php?foo=bar auf example.org/foo-bar könnte dann so ausschauen:

RewriteCond %{QUERY_STRING} foo=(.+)
RewriteRule ^index\.php$ http://example.org/foo-%1? [R=301,L]

Dadurch wird dann allerdings eine Endlosschleife ausgelöst - auch das Flag [L] schafft hier keine Abhilfe. Als hilfreich erweist sich aber eine Abbruch-Bedingung, die überprüft, ob die Variable THE_REQUEST einen markanten Bestandteil der alten URL enthält

RewriteEngine on

RewriteCond %{THE_REQUEST} index\.php
RewriteCond %{QUERY_STRING} foo=(.+)
RewriteRule ^index\.php$ http://example.org/foo-%1? [R=301,L]

RewriteRule ^foo-(.+)$ index.php?foo=$1

Mit dem obigen Regelsatz wird der Browser bei Aufruf von example.org/index.php?foo=bar weitergeleitet auf example.org/foo-bar und zeigt dort den Inhalt von example.org/index.php?foo=bar an.

Weitergehende Fragen zu diesem Thema können in meinem Webmaster-Forum gestellt werden.