99 Stimmen

HTACCESS: URL vereinfachen

Tutorial von Stefan Trost | Letztes Update am 10.05.2021 | Erstellt am 04.01.2015

Vielleicht haben Sie sich schon einmal gefragt, wie viele der heutigen Websites URLs wie example.com/suche, example.com/artikel/1 oder example.com/nutzername technisch realisieren. Schließlich läuft im Hintergrund ja meistens ein dynamisches PHP-Skript und auf dem Server wird kaum für jeden Nutzer oder jede Suchanfrage eine statische Seite unter dem entsprechenden Namen gespeichert sein.

Eine Lösung bietet HTACCESS mit mod_rewrite. Damit lassen sich URLs beliebig umleiten ohne dass der Besucher der Website etwas davon mitbekommt.

Alle Anfragen auf Index-Datei umleiten

Schauen wir uns zunächst ein einfaches Beispiel an. Wir schreiben dazu folgende Zeilen in eine reine Textdatei mit dem Namen .htaccess, die in das Stammverzeichnis unseres Webspaces gelegt wird. Außerdem muss das Modul mod_rewrite auf unserem Webspace aktiviert sein, was aber auf den meisten Servern der Fall sein sollte.

RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)$ index.php?seite=$1 [L]

Zunächst schalten wir mod_rewrite mit "RewriteEngine On" ein. Anschließend definieren wir als Basis für die Umschreibung das Stammverzeichnis.

Interessant wird es in der dritten Zeile. Hier definieren wir die Regel für eine Umleitung. Alle URL-Eingaben, die aus den Buchstaben a-z bestehen (^([a-z]+)$ ist ein regulärer Ausdruck dafür), möchten wir an die Seite index.php weiterleiten und als Parameter "seite" übergeben.

Wird zum Beispiel example.com/suche eingegeben, wird automatisch stattdessen example.com/index.php?seite=suche aufgerufen. Innerhalb von index.php können wir dann mit $_GET['seite'] den Parameter auslesen und schauen, welche Seite angefordert wurde und entsprechend reagieren.

Man sollte für die Umleitungen grundlegende Kenntnisse von regulären Ausdrücken haben. In diesem Fall bedeutet ^ und $ der Anfang und das Ende einer Zeichenkette, die Zeichenkette selber darf nur aus den Buchstaben a bis z bestehen und die in den Klammern gefundene Zeichenkette referenzieren wir mit $1 am Ende. Eine Eingabe wie example.com/seite1 würde dementsprechend nicht auf den regulären Ausdruck passen und daher auch nicht weitergeleitet.

Das [L] in der Anweisung steht übrigens für "Last" und bedeutet das nach dieser Regel keine weiteren mehr ausgeführt werden.

Seiten ohne HTML-Endung verfügbar machen

Nehmen wir an, wir haben einige HTML-Seiten, wie zum Beispiel example.com/suche.html, example.com/impressum.html und example.com/artikel.htm und möchten diese auch unter example.com/suche, example.com/impressum und example.com/artikel verfügbar machen. In diesem Fall können wir folgendes verwenden.

RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)$ $1.html [L]

Wieder verwenden wir den regulären Ausdruck, dieses Mal leiten wir aber nicht alles an index.php weiter, sondern kreieren aus der gefundenen Zeichenkette den Namen der HTML-Datei, indem wir ".html" anhängen.

Virtuelle Verzeichnisse

Manchmal findet man auch virtuelle Verzeichnisstrukturen in den URLs, die so auf dem Server gar nicht zu finden sind. Auch dies ist mit dem mod_rewrite Modul zu machen. Schauen wir uns dazu einige Beispiele an.

RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]+)/([0-9]+)$ index.php?a=$1&b=$2 [L]
RewriteRule ^([a-z]+)/([a-z]+)$ index.php?a=$1&b=$2 [L]

Diese beiden Regeln würden URLs weiterleiten, die aus zwei Verzeichnisebenen bestehen. Die erste Regel besteht in der ersten Ebene auf eine Zeichenkette aus Buchstaben und in der zweiten Ebene aus Zahlen. Also zum Beispiel example.com/seite/1 oder example.com/seite/2. Die zweite Regel erwartet auf beiden Ebenen Zeichenketten aus Buchstaben.

Beide Regeln leiten die Anfragen an index.php um, wo die Eingaben als $_GET['a'] und $_GET['b'] verfügbar sind.

RewriteEngine On
RewriteBase /
RewriteRule ^artikel/([a-z0-9]+)$ artikel.php?a=$1 [L]
RewriteRule ^suche/([0-9]+)$ suche.php?a=$1 [L]

Natürlich muss nicht jedes Verzeichnisebene flexibel sein. In diesem Beispiel leiten wir beispielsweise alle Anfragen wie example.com/artikel/xyz123 an artikel.php und alle Anfragen wie example.com/suche/1 an suche.php weiter. Damit lassen sich zum Beispiel dynamische URLs für durchnummerierte Suchergebnis-Seiten oder Artikel-Links erstellen.

Ausblick

Das Modul mod_rewrite ist sehr mächtig, daher kann ich hier nicht auf alle Möglichkeiten eingehen und möchte es bei diesen Grundlagen belassen.

Wer noch weitergehende Fragen hat, kann gerne einen Kommentar hinterlassen. Bei Bedarf bin ich bereit weitere Tutorials zu dem Thema zu schreiben.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

PHP: Eine E-Mail versenden

Tutorial | 0 Kommentare

Die Askingbox-Suche

Info | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.