http://example.com/article.php?category=blogging&title=seitentitel
Diese sind sehr unübersichtlich und irritierend. Aus Sicht der Suchmaschinenoptimierung ist dies auch sehr bedenklich.
Aus diesem Grund findet man auf vielen Webseiten URLs nach folgendem Schema:
http://example.com/article/blogging/seitentitel/
Diese sind deutlich übersichtlicher und strukturierter.
In diesem Artikel wird beschrieben, wie man dies SEO URLs mit Hilfe von Apaches mod_rewrite Modul erzeugt.
ModRewrite aktivieren
Zuerst muss das mod_rewrite Modul in Apache aktiviert werden. Bei den meisten Providern ist dies bereits Standard. Sollten Sie sich hier nicht sicher sein, fragen Sie bei Ihrem Hoster nach. Im Folgenden wird die Vorgehensweise bei root Zugriff auf den Server beschrieben.
Zunächst muss das Modul aktiviert werden. Dies geschieht über folgenden Befehl (als root):
a2enmod rewrite
Anschließend muss Apache neugestartet werden:
/etc/init.d/apache2 force-reload
Rewriting per .htaccess
Das transformieren der URL geschieht überlicherweise über die .htaccess. Dazu muss man zunächst folgendes eintragen:
Options -MultiViews
RewriteEngine on
Mit erstem Eintrag wird die evtl. aktivierte MultiViews Funktion deaktivert, welche bei manchen Providern aktiv ist und mit der RewriteEngine in Konflikt gerät. Letzter Eintrag aktiviert Apaches RewriteEngine.
Beginnen wir mit einem einfachen Beispiel:
RewriteRule ^about/$ /about.php [NC,L]
^ steht für Anfang der Zeichenkette. $ steht für das Ende.
Das NC in der Klammer bewirkt, dass nicht auf Groß- und Kleinschreibung geachtet wird.
Das folgende L beschreibt, dass das Umschreiben nach dieser Regel abgeschlossen ist, und folgende nicht mehr beachtet werden.
Möchte man lediglich die Dateiendung entfernen, so muss man nicht jede Datei einzeln eintragen. Es besteht auch die Möglichkeit eine universelle Regel zu verwenden:
RewriteRule ^(.*)/$ /$1.php [NC,L]
Hier steht das (.*) für eine beliebige Anzahl an Zeichen. Beim Aufbau dieser Regeln werden Reguläre Ausdrücke verwendet. Es ist von großem Vorteil sich einwenig damit zu beschäftigen.
ModRewrite mit Variablen
Wie bereits in der Einführung erwähnt, gibt es natürlich auch deutlich anspruchsvollere URLs in denen GET Parameter übergeben werden. Gehen wir einmal von bereits oben genannter URL aus:
http://example.com/article.php?category=blogging&title=seitentitel
Die Rewrite Regel hierfür würde folgendermaßen lauten:
RewriteRule ^article/(.*)/(.*)/$ /article.php?category=$1&title=$2 [NC,L]
Hier werden zwei Platzhalter (.*) verwendet. Die darin enthaltenen Zeichen sind später in $1, $2, $3 und so weiter nach der Reihenfolge enthalten.
Danach ist die Seite über folgende URL erreichbar:
http://example.com/article/blogging/seitentitel/
Weitere Suchmaschinenoptimierung
WWW oder nicht
Normalerweise sollte eine Domain nur unter http://example.com/ oder http://www.example.com/ erreichbar sein. Um nun eine Weiterleitung einzurichten genügt folgendes:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
Hier ist auch die neue Option RewriteCond. Sie beschreibt, wann die darauf folgende RewriteRule ausgeführt werden soll. %{HTTP_HOST} steht für den Hostnamen (z.B. example.com). Das Ausrufezeichen negiert den Folgenden Ausdruck. Übersetzt: Wenn eingegebener Hostname ungleich www.example.com, dann ...
Die Backslashes escapen den Punkt, da dieser sonst als Steuerzeichen des Regulären Ausdrucks dienen würde. Zeichen, welche escapet werden müssen sind u.a. . * ? ^ $
Die folgende RewriteRule wird ausgeführt, wenn http://example.com/ eingegeben wurde. Sie leitet dann mit einer permanenten Weiterleitung (R=301) auf http://www.example.com/ weiter.
Möchte man die Seite nur unter http://example.com/ erreichbar haben, genügt folgendes:
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Abschließendes Slash
Üblicherweise schließen URL mit einem Schrägstrich (/) ab. Bei unseren RewriteRules haben wir dies auch berücksichtigt. Gibt der Benutzer die Webseite nun ohne Slash am Ende ein, kann die Seite nicht gefunden werden.
Man könnte nun die RewriteRules anpassen, allerdings wäre das weniger gut. Ist die Webseite mit und ohne Schrägstrich am Ende erreichbar wird dies von Suchmaschinen teilweise als doppelter Inhalt gewertet. Mit folgender Regel wird (wenn nicht schon vorhanden) ein Slash an die Adresse angefügt:
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
%{REQUEST_URI} enthält die komplette URL. Die RewriteCond prüft, ob kein Punkt am Ende vorhanden ist (z.b. index.php). Dann würde ein anschließendes Slash wenig Sinn machen. Weiterhin wird geprüft, ob noch kein Slash am Ende existiert. Trifft beides zu, wird die RewriteRule wieder mit einer permanenten Weiterleitung umgeleitet.
Probleme mit Stylesheets oder Dateien
Sie werden wahrscheinlich merken, dass plötzlich die Stylsheets oder bestimmte Bilder nicht mehr gefunden werden. Dies kann an der Verwendung von relativen Pfadangaben liegen. Diese stimmen nach dem Rewriting nicht mehr. Abhilfe schafft hier eine absolute Adressierung oder folgender Eintrag nach RewriteEngine on:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Damit sind vorhandene Dateien und Ordner wieder auffindbar. Zusätzlich ist es ratsam bespielsweise in Ordnern mit Bilddateien oder mit Stylesheets eine .htaccess mit dem Eintrag RewriteEngine off zu platzieren.
Weiterhin kann man im <head> Abschnitt jeder Datei einen <base> Tag notieren, um einen festen Ausgangspfad für alle relativen Pfadangaben zu setzen.
Fazit
Apaches ModRewrite ist ein sehr praktisches Tool und zur Suchmaschinenoptimierung unverzichtbar. Allerdings können kompliziertere Reguläre Ausdrücke Kopfzerbrechen bereiten.
Quellen: Apache Logo
Similar articles
- Piwik Webanalytik im Test
- Feeds auf Facebook und Twitter verteilen
- Social Buttons mit ShareThis
- Google +1 und Suchmaschinenranking
- Google Indexierung beschleunigen
- Top 10 Web Entwickler Blogs
- Die eigene Cloud mit ownCloud + Ubuntu
- Performanter Nginx Webserver auf dem Raspberry Pi mit PHP und APC
- Apache mit PHP und APC auf dem Raspberry Pi
Günstig Shoppen
23.11.2013 07:25
So ein verständlichen Artikel zu diesem Thema habe ich noch nie gefunden !