Cover_19-6_gruen_low

Schweizer Fachzeitschrift
für Publishing und Digitaldruck


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

 

 

PHP

Server-Fehler per PHP generieren

(msc) Wer HTML-Seiten per PHP generiert, sollte an eines denken: Bei Fehlern, die aufgrund fehlender Dateien oder veralteter Links entstehen, ist es wichtig, einen HTTP-Fehlercode zurückzuliefern. Wenn man sich darauf beschränkt, eine Fehlermeldung anzuzeigen, dann verstehen das zwar menschliche Surfer. Die Roboter der Suchmaschinen kriegen jedoch nicht mit, dass etwas nicht stimmt und indizieren brav die Fehlermeldung. Hier ein Beispiel, wie Sie in einem PHP-Script den HTTP-Fehler 404 (nicht gefunden) zurückliefern:

if (!file_exists($datei)){

header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');

echo "Die Seite ".$datei." gibt es leider nicht.";

exit();}

Die über echo ausgegebene Fehler­meldung ist für Browser wie Firefox, die ansonsten nur eine leere Seite anzeigen würden – Sie können natürlich auch auf die Standard-Fehlerseite weiterleiten. Der Internet Explorer würde in diesem Fall eine eigene Fehlerseite anzeigen.

 

HTTP

Ortsangabe in der Website

(msc) Wo ist mein Blog, meine Website zu Hause? Weil Websites virtuelle Gebilde sind, kann man sich ganz unterschiedliche Antworten auf diese Frage vorstellen: Da, wo der Webserver steht. Oder: Wo meine Firma lokalisiert ist bzw. da, wo ich wohne. Doch egal, wo man seine Website verorten will – technisch geschieht das über einen Geo-Tag bzw. eine ICBM-Adresse. Das Kürzel steht, kriegerisch genug, für «Intercontinental ballistic missile», zu Deutsch für «Interkontinentalrakete». Die Adresse selbst gibt die geografische Position als Längen- und Breitenangabe an, sodass man auf Sites wie www.geourl.org auf der Weltkarte nach Sites suchen oder die «Nachbar-Sites» einer Adresse feststellen kann.

Wer seine Website in der richtigen Welt verorten möchte, fügt die passenden Geo-Tags bzw. den ICBM-Tag im Header der HTML-Seiten hinzu.

Die geografischen Daten finden Sie über www.multimap.com, togis.com oder www.active-value.de/geocoder heraus. Oder man lässt sich die Angabe gleich fixfertig von www.mygeoposition.com generieren. Die Redaktionsstube des Publisher befindet sich auf dem Längengrad 8,72993 und dem Breitengrad 47,49887. Entsprechend würden wir publisher.ch wie folgt verorten:

<META name="geo.position" content="47.4989;8.7297">

<META name="geo.region" content="CH-ZH">

<META name="geo.placename" content="Winterthur">

<meta name="ICBM" content="47.4989, 8.7297">

Ob die Adresse passt, finden Sie über den Geo-Tag-Validator heraus:

www.geo-tag.de/validator/de.php