smart | Webentwicklung
Alles rund um HTML5, PHP, WordPress & Co.

WordPress: Erklärung von mod_rewrite in htaccess

26. März 2013
Stephan
WordPress mod_rewite-Regeln in htaccess erklärt

Im Admin-Bereich von WordPress habt ihr die Möglichkeit unter dem Menüpunkt Einstellungen die URL-Struktur der Permalinks anzupassen.

Bei der Erstellung dieser sogenannten „Pretty Permalinks“ erzeugt WordPress im Hauptvezeichnis eurer WordPress-Installation eine .htaccess-Datei, wenn diese nicht bereits existiert. In die Datei werden anschließend spezielle mod_rewrite Anweisungen/Regeln geschrieben.

Bei mod_rewrite handelt es sich um ein Modul für Apache. Das Modul bietet ein regelbasiertes System zum dynamischen Ändern der angefragten URL an.

In diesem Artikel erkläre euch diese von WordPress eingefügten mod_rewrite Anweisungen.

Inhalt der .htaccess von WordPress

Im Normalfall sollten in eurer .htaccess die von WordPress eingefügten mod_rewrite Anweisungen wie folgt aussehen:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Diese Anweisungen werden wir nun Zeile für Zeile durcharbeiten.

1. Zeile

# BEGIN WordPress

Hierbei handelt es sich lediglich um einen Kommentar.

2. Zeile

<IfModule mod_rewrite.c>

Die Direktive bzw. Anweisung IfModule dient zum Sicherstellen, dass die nach dieser Zeile folgenden Anweisungen nur abgearbeitet werden, wenn mod_rewrite in Apache korrekt eingebunden ist.

Falls also das Modul mod_rewrite in Apache eingebunden ist, werden demnach alle Anweisungen zwischen <IfModule mod_rewrite.c> und </IfModule> von Apache verarbeitet.

3. Zeile

RewriteEngine On

Die RewriteEngine-Direktive setzen wir hier auf On. Damit aktivieren wir mod_rewrite, so dass die Rewrite-Anweisungen ausgeführt und verarbeitet werden.

4. Zeile

RewriteBase /

Die Direktive RewriteBase sorgt in diesem Fall dafür, dass ein Slash ans Ende der URL gesetzt wird. Der Slash wird jedoch erst nach Abarbeitung aller Rewrite-Regeln hinzugefügt.

Prinzipiell müsst ihr euch das so vorstellen: Bevor die angefragte URL die Rewrite-Regeln durchläuft, wird sie von Apache angepasst. Apache löscht den Domainnamen sowie den darauf folgenden Slash.

Aus

http://www.smart-webentwicklung.de/wordpress-artikel

wird

wordpress-artikel

Nachdem die Regen durchlaufen sind und die URL ggf. geändert wurde oder auch nicht, wird der Slash ans Ende der URL angehängt:

wordpress-artikel/

Näheres hiezu findet ihr auch noch mal bei selfhtml.org.

5. Zeile

RewriteRule ^index\.php$ - [L]

In dieser Zeile haben wir nun die erste Rewrite-Regel. Die Regel besagt, dass wenn es sich um die angefragte URL um index.php handelt, dann nehme keine Änderung an der URL vor.

Der [L]-Flag gibt in diesem Fall an, dass die Abarbeitung der Regeln gestoppt wird, wenn die besagte Regel zutrifft.

6. Zeile

RewriteCond %{REQUEST_FILENAME} !-f

Diese Regel prüft, ob die zu der angefragten URL passende Datei existiert.

Wir nehmen wieder folgende URL an:

wordpress-artikel

Intern belegt Apache die Variable %{REQUEST_FILENAME} dann mit path/to/your/page/wordpress-artikel. Die Anweisung -f dient dazu, zu überprüfen, ob die Datei existiert oder nicht. Das Ausrufezeichen sorgt einfach für eine Negation des Werts.

Vereinfacht ausgedrückt:
Gib den Wert true zurück, wenn die Datei bzw. der Dateipfad %{REQUEST_FILENAME} im physikalischen Dateisystem nicht exisiert.

7. Zeile

RewriteCond %{REQUEST_FILENAME} !-d

Analog zur vorherigen Zeile, wird hier getestet, ob ein entsprechendes Verzeichnis existiert.

8. Zeile

RewriteRule . /index.php [L]

Treffen die Regeln in Zeile 6 und 7 zu, dann wird diese Regel abgearbeitet. Hier wird nichts weiter gemacht, als die Anfrage zur index.php weiterzuleiten.

Ruft ihr z.B. die URL eines Bildes eures Blogs auf, dann existiert zu der angefragten URL auch der entsprechende physikalische Dateipfad. In dem Fall liefert Zeile 6 also false zurück und es wird direkt das Bild zum Client ausgeliefert.

Fragt ihr aber irgendeine URL an, die umgewandelt in einen Dateifpfad im Dateisystem nicht existiert, dann wird die Anfrage an index.php geleitet.

9. Zeile

</IfModule>

Analog zur öffnenden IfModule-Anweisung wird sie in dieser Zeile geschlossen.

10. Zeile

# END WordPress

Diese letzte Zeile beinhaltet nur einen abschließenden Kommentar.

Fazit

Auf den ersten Blick mögen die in die .htaccess von WordPress eingefügten mod_rewrite-Regeln kompliziert aussehen. Mit diesem Artikel hoffe ich, dass ihr die Anweisungen jetzt ein wenig besser versteht und wisst, wofür die einzelnen Zeilen eigentlich dienen.

Für diejenigen von euch, die es noch ein wenig ausführlicher sowie verständlicher mögen, empfehle ich den Artikel The WordPress .htaccess File Explained zu lesen.

Habt ihr eventuell weitere Fragen zur .htaccess von WordPress bzw. generell zu mod_rewrite?

Kommentare  
1 Kommentar vorhanden
1 Jürgen Obermeyer schrieb am 2. September 2013 um 15:59 Uhr

Hallöchen!

Erst mal herzlichen Dank für deine Erklärungen – das hat mir den Einstieg in mod_rewrite etwas erleichtert. Allerdings hätte ich gerade bzgl. des Umschreibens von URLs im Zusammenhang mit WordPress tatsächlich noch zwei, drei Fragen und wüsste gerne, ob und ggf. wo ich die loswerden darf.

Danke und viele Grüße,

Jürgen

1 Trackback/Pingback vorhanden
Du bist herzlich eingeladen auch ein Kommentar zu hinterlassen!
Kommentar schreiben

Vielen Dank für dein Kommentar!