RewriteRule: Was tun wenn sich die Dateiendung ändert?

XOVI Banner

Gehen wir von dem fiktiven Beispiel aus, dass eine Website komplett überarbeitet wurde: Dabei wurden alle Dateitypen von *.shtml auf *.htm Dateien geändert. Deswegen muss eine Lösung her, damit die Links nichts ins leere führten. Das mod_rewrite in der .htaccess bietet hier Abhilfe.

Das Problem liegt darin, dass bei allen Unterseiten nur die Dateitypen (nicht die Dateinamen) verändert wurden. Aus *.shtml wurde *.htm. Wir wollten, das die externen Links nicht auf die Error 404 Seite linken, das würde wahrscheinlich viele Besucher kosten.

Mit einigen Zeilen über das mod_rewrite war das Problem aus der Welt geschafft:

Dies macht es möglich, das die Anfrage an eine Datei www.seite.de/news.shtml automatisch von www.seite.de/news.htm beantwortet wird. Wichtig hierbei ist, das du nur die Dateitypen ändern darfst, und nicht die Dateinamen.

Die RewriteRule ist die Regel, mit welcher das ersetzen erfolgen soll. (.*) steht für ein oder beliebig viele Zeichen (keine Sonderzeichen), das entspricht dem Dateinamen. Es ist eine Art Variable, in der der Dateiname gespeichert wird. Dieser ist innerhalb der RewriteRule weiterhin verfügbar. Da es der erste Platzhalter ist, wird der Wert über den Namen $1 angesprochen.

Alle Anfragen an (.*)\.shtml$ werden dadurch an die entsprechende Seite $1.htm weitergeleitet.

So lassen sich dynamische URLs umwandeln!

Mit dem Apache Modul mod_rewrite kannst du deine dynamischen Webseiten suchmachinenfreundlicher machen, indem der Uniform Resource Locator (kurz: URL) einfach ein wenig angepasst wird.

Eine Suchmaschine erkennt eine dynamische Webseite an dem „?“ bei der URL. Manche Suchmaschinen geben schon bei der Sicht dieses Fragezeichen die Indexierung auf. Auch Dateien mit der Dateiendung *.php, oder *.pl werden oftmals nicht (korrekt) indexiert.Dies kann unter der Verwendung des mod_rewrite verhindert werden.

Das Ziel ist es, die „?“, und die Wertzuweisungen als Parameter in der URL durch einen „/“ zu ersetzen. Abgerundet kann dies noch dadurch umgesetzt werden, das die dynamischen Dateiendungen z. B. durch *.html oder *.shtml ersetzt werden.

Die URL, z. B. zu einem Newsskript sieht anfangs noch so aus:

Besser wäre es natürlich, wenn die URL am Ende so aussehen würde.

Zunächst muss definiert werden, wie, und was das mod_rewrite in dem Fall an der URL verändern soll. Zunächst einmal das Fragezeichen, es soll durch einen / ersetzt werden.

Die Dateiendung *.php soll komplett aus der URL verschwinden, auch die Wertzuweisung des Parameters nr=““ soll ganz ersetzt werden. Der Apache soll anhand der URL die entsprechende nr automatisch ermitteln, und an das Skript übergeben.

Zunächst muss die RewriteEngine auf on geschaltet werden. Danach wird die RewriteRule, die Regel definiert.

Das wirkliche Umschreiben der URL macht die RewriteRule. Mit ihr wird die „Regel“ definiert, nach welcher die URL verändert werden soll.

news/(.*)\.html$: Das (.*) nach news/ kann für alles stehen, es ist eine Art Platzhalter, der innerhalb des regulären Ausdrucks wie eine Variable verwendet werden kann. Da es der erste Platzhalter ist, wird es als Variable $1 definiert. In diesem Beispiel ist die Variable die Nummer der News. Durch einen\ getrennt steht die Dateiendung des Artikels,

Der URL sieht jetzt so aus:

Das $ Zeichen definiert das Ende des regulären Ausdrucks. Dahinter steht die „wirkliche“ URL zu dem Skript, aus welchem das Ergebnis der Abfrage geholt wird, und über die anscheinenden URL ausgegeben wird.

Das $1 steht wie gesagt für die Artikelnummer. Und das ist auch schon alles. Anfragen werden jetzt über beide Adressen behandelt, zum einen direkt an das Skript, über die gewöhnlichen URL oder über die vom mod_rewrite erzeugte URL.

Mit dem mod_rewrite lässt sich auf diese Art vieles machen. Wer die Möglichkeit hat, mit dem Modul zu arbeiten, der sollte diese auf jeden Fall wahrnehmen.

Bewerte diesen Artikel
1 Stern2 Sterne3 Sterne4 Sterne5 Sterne

2 Bewertung(en), durchschnittlich: 5,00 von 5

Loading...

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.