Forgot your password?

Forgot your username?

All about IT, Web and Development.
By users for users.

SEO URLs mit ModRewrite



Sicherlich haben Sie schon des Öfteren URLs nach folgendem Schema gesehen:

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



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

Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit
DataCloud

Leave a comment

I have read the privacy policy and agree to electronically store and process my input data to answer the request.

Günstig Shoppen

23.11.2013 07:25

Vielen Dank für diesen tollen Artikel.
So ein verständlichen Artikel zu diesem Thema habe ich noch nie gefunden !