Lesbare URLs

__Der Trend zur Dynamischen Webseitenprogrammierung hat eines ganz vergessen lassen: Die Lesbarkeit von Internetadressen (URLs).

Hier besprechen wir den Wandel und geben Tips zur effektiven Seitenprogrammierung.

Diesen Artikel sollten sich alle durchlesen, die dynamische Webseiten Programmieren und mit URL Parametern arbeiten.__

Inhalt

Worum geht es hier?

Sicher hast du schon Internetadressen wie: http://members.freepage.de/~kunz gesehen, auch wenn die durch steigende sog. kurz-URL dienste wie http://www.nic.de.vu/ langsam "aussterben." Auch diese Kurz URLs wie: http://www.kunz.ch.vu/ oder http://kunz.home.pages.de/ werden dir wahrscheinlich bekannt sein.
Auch haben immer mehrer Leute eine eigene Domain, wie z.B. http://www.meine-homepage.de/ da ja es solche Domains und zugehörigen Webspace bereits für wenige Euro gibt.

Klar ist auch, dass man sich eine Seite wie www.meine-homepage.de wesentlich besser merken kann, als z.B. www.provider.de/meine_homepage.

Aber wie sieht es mit den sog. "Unterseiten" aus? -Also z.B. http://www.meine-homepage.de/privat/uber_mich.htm? Auch diese sind noch einfach zu merken.

Nun erfreuen sich einfach zu erlernende Scriptsprachen wie ASP oder PHP zunehmender Beliebtheit und mancher fängt an seine Seiten dynamisch zu Programmieren, d.h. dass die Seiten in einer Datenbank wie Access oder mySQL gespeichert sind. -Solche Seiten erkennst du an den kryptischen Adressen wie: http://www.meine-homepage.de/page.php?getpage=true&print=no&id=12345 oder solche von Programmierern, die sich die Adresse mittels mod_rewrite etwas übersichtlicher gemacht haben: www.meine-homepage.de/view/12345/ – Und genau darum geht es hier. Die Übersichtlichkeit von Internet Adressen.

Wieso müssen Internetadressen "übersichtlich" sein?

Dies werde ich oft gefragt, wenn ich das Thema anspreche. Hier deswegen einige Gründe:

Die Homepage sieht übersichtlicher aus

Man erkennt sofort die Struktur der Webseite und kann auch ohne links darauf navigieren. z.B. durch das "blinde erraten einer URL".

Der Besucher weiss schon vor dem Laden der Seite um was es geht

Und dies erhöht deine Chancen wesentlich, dass der Besucher deine Seite auch anschaut. -Denn ein durchschnittlicher Websurfer nimmt sich nur einige Sekunden Zeit um zu bestimmen ob die Seite sehenswert ist – Zu kurz um ein etwas langatmigeres Intro zu lesen.

Du kannst jemandem URLs weitergeben, ohne immer nachschauen zu müssen

Bei einer Webseite in der du alle Seiten und Verzeichnisse von Hand erstellt und raufgeladen hast, kannst du jemandem schnell sagen, wo auf deiner Seite er eine bestimmte Information findet: "Geh auf: www.meine-homepage.de/uber_mich/meine_bilder.htm um einige Bilder von mir zu sehen!" -Aber was ist, wenn die Seite mit den Bildern in einer Datenbank gespeichert ist und nur noch eine sog. ID-Nummer als Identifikation besitzt? Willst du dir für jede deiner Seiten eine Nummer auswendig lernen? Und wie soll jemand, der gerade nicht online ist, du also die Adresse z.B. im Zug oder in der Schule gibst merken, dass er deine Bilder unter www.meine-homepage.de/view/3452/ oder noch schlimmer www.meine-homepage.de/page.php?mod=gallery&view=3455 findet?

Viel vorteilhafter wäre es doch, wenn du auch deine dynamischen Seiten weiterhin unter einer gut zu merkenden Adresse wie: www.meine-homepage.de/uber_mich/meine_bilder/ weitergeben könntest…

Suchmaschinen bewerten die URL relativ hoch

Ein ebenfalls nicht zu vernachlässigbarer Punkt sind wieder mal die Suchmaschinen, über diese doch fast 90% der Besucher zu deiner Seite finden. Und die Suchmaschinen (und nicht zuletzt auch die Benutzer dieser!) bewerten die Adresse der Internetseite relativ hoch; sie gibt den eindeutigsten Hinweis auf den Inhalt der Seite; mehr als irgendwelche META-KEYWORDS oder evtl. sogar Seitentitel.

Man sieht so ja auch sofort, was auf der Seite das Hauptthema sein wird.

Müssen die dynamischen Seiten also wieder auf altmodische Art von Hand erstellt werden?

Nein! Zumindest unter dem populären Apache Webserver der unter Linux und Windows erhältlich ist, besitzt da so ein "Wundermittel" das sich mod_rewrite nennt.

Was ist mod_rewrite

mod_rewrite ist ein Apache Modul um Internetadressen beliebig umzuwandeln, d.h. du kannst z.B. irgendwelche fiktiven Pfade auf ein Script lenken und von Aussen merkt man nicht, dass das Verzeichnis nicht "echt" existiert.

Ein Beispiel:

Du möchtest dass deine Seite: meine-homepage.de/page.php?mod=gallery&view=3455 von nun an über meine_homepage.de/bilder/ aufgerufen werden kann.
In der .htaccess Datei fügst du dann folgende zwei Zeilen ein:

RewriteEngine on
RewriteRule ^bilder/    /page.php?mod=gallery&view=3455/

Von nun an sind deine Bilder unter meine-homepage.de/bilder/ erreichbar -Ohne Umleiten, ohne, dass irgendjemand jemals die "richtige" Adresse deiner Seite zu sehen bekommt.

Wie funktioniert das?

Sobald der Apache Webserver, bzw. das mod_rewrite Modul den Pfad bilder/ afängt, wandelt es im Hintergrund die Adresse um in ‚page.php?mod=gallery&view=3455‘, sendet aber jeweils nur den "virtuellen Pfad" (bilder/) zum Browser.

Cool, was kann man damit noch alles machen?

Eine Menge! Nachfolgend nur zwei Beispiele:

Du möchtest generell Adressen wie: meine-homepage.de/page.php?id=x in meine-homepage.de/seiten/x umwandeln lassen:

RewriteEngine on
RewriteRule ^seiten/(.*)/ /page.php?id=$1

Das ‚$1‘ ganz rechts stellt hierbei eine Variable dar und steht jeweils für das was in ‚(.*)‘ auf der linken Seite steht. -Das heisst alles was nach: ’seiten/x/‘ kommt wird nach /page.php??id=x umgeleitet

Es soll <B>alles</B> was hinter meine-homepage.de/ steht auf ein PHP Script verweisen:

RewriteEngine on
RewriteRule ^(.*)$    /page.php?pfad=$1

Das macht aus einer Adresse wie: meine-homepage.de/uber_mich/lebenslauf/bilder/ -> meine-homepage.de/page.php?pfad=/uber_mich/lebenslauf/bilder/

<EM>Achtung:</EM> Damit würdest du auch Seiten, die real auf dem Webserver existieren weiterleiten lassen und könntest diese nicht mehr abrufen. Selbstverständlich kennt mod_rewrite aber auch sog. "conditions", das heisst regeln nach denen es umleitet.
Folgender Code leitet, wie oben alles weiter, <I>ausser</I>, der Pfad oder die Datei existiert wirklich auf dem Server:

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$    /page.php?pfad=$1

Die Zeile: <I>RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f</I> sorgt dafür, dass nur umgewnadlet wird wenn eine solche Datei nicht existiert und <I>RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d</I> stellt dies analog für Verzeichnisse sicher.

Damit sollte eigentlich auch schon klar sein, wie man seine Pfade auch bei grossen Datenbankbasierten Webseiten übersichtlich halten kann.
Nachfolgend Hinweise, wie man eine solche Seite realisiert.

Dynamische Webseiten übersichtlich

Alles was du nun tun musst, ist jedem Datensatz deiner Seite ein zusätzliches Feld mit dem gewünschten Pfad hinzuzufügen, also dass deine Datenbank-Tabelle etwa so erweitert wird:
<PRE>
ID Title Content Pfad
==============================­=======
0 / … /

    1 Technet … /technet

2 Tipps … /technet/tipps
3 Internet … /technet/tipps/internet
4 Downloads … /downloads
5 Internet … /downloads/internet
6 Treiber … /downloads/treiber
7 Win9x … /downloads/treiber/win9x
8 Win2k … /downloads/treiber/win2k
9 OS/2 … /downloads/treiber/oshalbe

    10 Tools … /downloads/tools

</PRE>

Das Feld Pfad stellt dann die gewünschte Adresse der Seite dar, etwa so wie du früher die Dateien und Verzeichnisse benamst hast, tust du dies jetzt halt in der Datenbank.

Jetzt erstellst du eine Datei mit dem Namen .htaccess in deinem Homepage-Verzeichnis und schreibst darin etwas wie:

#Aktiviert das mod-rewrite-modul
RewriteEngine on
 
#Dateien und Verzeichnisse die existieren sollen normal abrufbar sein
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
 
#Falls es sich um die Startseite handelt wird auch nicht umgewandelt
RewriteCond %{REQUEST_URI} !^/$
 
#Alles andere wird auf /page.php?pfad= gemappt
RewriteRule ^(.*)$    /page.php?pfad=$1

Und in der Datei page.php, in der du bis jetzt die ID mittels page.php?id= abgefragt hast, musst du nun nur noch umändern damit du die pfad-variable anstatt die ID zum abfragen brauchst.
Wenn es dir bequemer ist mit der ID anstatt dem Pfad zu arbeiten, kannst du auch gleich zu Begin der Seite kurz die ID anhand des Pfades abfragen, z.B. SQL:

SELECT id FROM tblSeite WHERE pfad = '$pfad'

Du hast so ganz normal die Seiten-ID zur Weiterverarbeitung zur Verfügung und jede deiner Seiten ist ab sofort unter einem übersichtlichen Pfad abrufbar.

Weitere Möglichkeiten

Selbstverständlich lässt sich mit dem mod_rewrite-modul noch viel mehr machen! Dieser Artikel konnte dir diesbezüglich nur eine ganz kleine Auswahl an Möglichkeiten aufzeigen. Wenn du dich daher tiefergehend für solche URL-Manipulationen interessiertst, ist dass lesen der Modulbeschreibung zu mod_rewrite und die Recherche bei Google unumgänglich.

Eine weitere kleine Möglichkeit möchte ich dir aber nicht vorenthalten, sie eignet sich insbesondere, wenn du auch sog. "Print-Versionen", also für den Drucker optimierte Seiten anbieten willst und diese bis anhin z.B. mittels print.php?id=[ID] aufriefst.

Folgende mod_rewrite-regel ist hier empfehlenswert:

#leitet alls nach /print/ weiter
RewriteRule ^print/(.*)/    /print.php?pfad=$1/
 
#Sorgt dafür, dass /pint/ nicht auf die page.php umgewandelt wird
RewriteCond %{REQUEST_URI} !^/print/(.*)$

Damit kannst du nun eine Printversion aller deiner Seiten über meine-homepage/print/pfad_zur_seite/ abrufen; in der print.php verfährst du ähnlich wie in page.php.

Schlusswort

Ich hoffe, dieses Tutorial hat dir geholfen und konnte dich animieren selbst mal mit mod_rewrite rumzuspielen… 😉
Bei weiteren Fragen stehe ich dir im Forum jederzeit zur Verfügung! g

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert