Apache

Benutzerfreundliche Adressen

(msc) Statische Websites sind immer weniger gefragt. An die Stelle der fixfertigen HTML-Seiten treten dynamisch generierte Inhalte. Bei den «Generatoren» der dynamischen Inhalte existiert eine breite Palette. Den Einstieg machen einfache PHP-Scripts, die Navigation und Inhalt zusammenbauen. Grosse Sites verwenden ein mit allen Raffinessen ausgestattetes Content-Management-System.

Ob simpel oder aufwendig, der Nachteil bei dynamischen Websites liegt in der kryptischen Adressierung der Sites. Bei statischen Sites hat man, wenn die Site denn selbst klar strukturiert ist, eine einleuchtende URL. Bei einer fiktiven Website, deren Inhalte chronologisch organisiert sind, könnte die Adresse so aussehen:
www.site.ch/2008/1/inhalt01.html

Wird diese Site nun dynamisch organisiert, dann sieht die Adresse anders aus, beispielsweise so:
www.site.ch/index.php?jahr=2008&monat=1&artikel=inhalt01

Eine solche Adresse ist unpraktisch. Zum ersten kann man sie kaum auf ein Plakat oder Inserat abdrucken, denn kein Surfer wird sie abtippen – und wenn er es tut, sind Schreibfehler vorprogrammiert. Zum zweiten machen solche allzu komplexen URLs oft Probleme in Suchmaschinen, was höchst unerwünscht ist. Und zum dritten sind solche URLs als Permalink oder für den «Eigengebrauch» unpraktisch.

Das sind drei gute Gründe, sich mit den umfangreichen Möglichkeiten von Apache vertraut zu machen. Die weit verbreitete Webserver-Software ist in der Lage, statische Adressen auf dynamische umzuschreiben. Man kann gegen aussen somit andere – einfache, kurze und prägnante – Adressen verwenden, intern operiert man aber mit den fürs CMS geeigneten Adressen.

Um diese Funktion zu verwenden, muss in Apache das Modul «mod_rewrite» zur Verfügung stehen. Die Adress-Umschreibung wird über den Befehl RewriteRule in der Datei «.htaccess» durchgeführt. Dort muss als erstes über den Befehl RewriteEngine on die Umschreibung aktiviert werden.

Die Umschreibungsregel besteht aus dem Aufruf RewriteRule, aus dem Suchmuster für die Ersetzung und der neuen Anweisung, wie Apache die neue Adresse generieren soll. Das Suchmuster ist ein regulärer Ausdruck. Anwender von Perl sind mit der Syntax vertraut. Webmaster, die sich bislang nicht mit regulären Ausdrücken beschäftigt haben, müssen sich erst etwas einarbeiten. Wichtig zu wissen: Das Dach (^) gibt den Anfang des Suchmusters vor, das Dollarzeichen ($) das Ende. Der Punkt (.) steht für ein beliebiges Zeichen, das Plus (+) gibt an, dass das vorangehende Zeichen mindestens einmal oder mehrfach vorkommen kann. Ein solcher Suchterm muss geklammert werden. Entsprechend steht das Suchmuster (.+)/ für den Inhalt, der in der Adresse vor einem Schrägstrich steht. Wenn Sie den Punkt als Punkt brauchen, setzen Sie das Escape-Zeichen (\) voran: . Analog verfahren Sie mit anderen Zeichen, die bei regulären Ausdrücken eine besondere Bedeutung haben.

Optionale Zeichen, also solche, die einmal oder keinmal vorkommen können, geben Sie mit einem Fragezeichen (?) an. Zeichen, die beliebig oft oder keinmal vorkommen, werden mit dem Stern gekennzeichnet (*). Der gerade Strich (|) steht für Entweder-oder, und ein Satz von erlaubten Zeichen gibt man mittels eckiger Klammern vor. Hier darf man mit dem Bis-Zeichen (-) auch einen Bereich angeben: [a-z] gibt alle Buchstaben an. Normalerweise unterscheidet die Suche nach Gross- und Kleinschreibung. Wenn Sie diese ignorieren möchten, verwenden Sie das Flag [NC].

Wenn Apache die übergebene Adresse gemäss Rewrite-Rule auswerten kann, wird die neue Adresse generiert. Die durch Suchmuster gefundenen Bestandteile der ausgewerteten Adresse stehen über Variablen bereit. Diese Variablen beginnen mit einem Dollarzeichen und werden durchnummeriert.

Nachfolgend ein Beispiel für eine Rewrite-Rule, die gemäss dem eingangs aufgeführten Beispiel statische Adressen in dynamische umschreibt:
RewriteRule ^(.+)/(.+)/(.+).html$ /index.php?jahr=$1&monat=$2&artikel=$3 [NC]

Anhand der Schrägstriche (/) zerlegt die Rewrite-Rule die Adresse nach Verzeichnissen, d.h. im konkreten Beispiel nach dem Verzeichnis fürs Jahr und für den Monat und greift den Namen der Datei ohne die Endung «.html» heraus. Aus diesen Versatzstücken baut Apache dann den dynamischen Aufruf, der ans PHP-Script übergeben wird.

Weitere Einsatzgebiete sind in der Praxis beispielsweise das Verkürzen von langen URLs, das Umschreiben von Endungen (zum Beispiel von «.php» auf «.html» oder von «.htm» auf «.html». Das Apache-Modul «mod_rewrite» hat aber noch einiges mehr zu bie-ten. Über RewriteMap kann umfangreicheren Ersetzungen eine Ersatz­tabelle zugrunde gelegt werden. Über RewriteCond kann man die Adress­ersetzung an Bedingungen knüpfen. Der folgende Befehl würde Benutzer des Opera-Browsers an eine spezielle Adresse weiterleiten:
RewriteCond %{HTTP_USER_AGENT} ^Opera.*
RewriteRule ^/$ /index_opera.php [L]

HTTP_REFERER gibt die verweisende Seite an. So könnten Sie Besucher, die von einer speziellen Seite oder Domäne kommen, gebührend empfangen. HTTP_COOKIE erlaubt Auswertungen von Cookies. REMOTE_ADDR stellt die IP-Adresse dar – so kann man beispielsweise unerwünschte Gäste anhand ihrer IP-Adresse fernhalten.

Über Flags ist es auch möglich, Fehlercodes an den Browser zu senden, etwa F für forbidden (HTTP-Fehlercode 403) oder g für 410 gone.

Die Dokumentation des Befehls finden Sie hier: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html. Eine weitere gute Anlaufstelle ist auch www.modrewrite.de

Solche URLs müssen nicht sein – mit Apache gehts auch kürzer.

Quelle: Publisher, Donnerstag, 12. Juni 2008

Rubrik und Tags:

Faksimile

Metadaten
Thema: Webtipps
Nr: 8295
Ausgabe: 08-3
Anzahl Subthemen: 3

Obsolete Datenfelder
Bilder: 1
Textlänge: 167
Ort:
Tabb: FALSCH