WordPress Permalinks unter nginx

NGINX die Arbeitsbiene für WordPress

Ich arbeite inzwischen sehr gerne mit dem Webserver nginx  (ausgesprochen wie englisches „engine-ex“ [ˈɛnʤɪn ˈɛks]) wenn es um trafficintensive WordPressblogs geht.

Es gibt eine Anpassung in der Konfiguration des Webservers die man beachten muss, damit die Permalinkstruktur der WordPressinstallation funktioniert.

Schritt für schritt durch die nginx Konfiguration

Ich greife dafür (man muss das Rad ja nicht neu erfinden) diesen englischsprachigen Artikel auf und habe ihn übersetzt. Der Artikel beschreibt das Thema sehr gut.

Im Allgemeinen funktioniert WordPress „out-of-the-box“ mit nginx. Die Beiträge laden prima, die Funktionalität des Dashboards ist gut, solanga bis wir zum Thema Permalinks kommen. Wenn Du mit dem Apache und dem mod_rewrite Modul arbeitest, wird WordPress die erforderlichen Rewrite-Regeln für die Permalinks in die .htaccess-Datei schreiben. Für den nginx Webserver musst Du die Regeln hinzufügen.

Erkennt WordPress, dass mod_rewrite nicht geladen wird (was ja unter nginx der Fall ist), fällt es zurück zur pathinfo Permalinks Struktur, welche eine zusätzliche „index.php“ einfügt. [Anmerkung: Wusste ich nicht. Steht hier und sieht dann im Ergebnis so aus: http://example.com/index.php/yyyy/mm/dd/post-name/.] Das war kein großes Problem für mich, da ich die benutzerdefinierte Linkstruktur verwendet habe um die indes.php zu entfernen. Das hat für mich gut funktioniert. (Screenshot unten)

Einstellungen Permalinks

Abgesehen davon musst Du die nginx Konfigurationsdatei bearbeiten, damit Deine Permalinks funktioniert. Wir werden dazu die try_files Direktive (verwendbar ab nginx 0.7.27+) verwenden, um URLs die über die index.php kommen für eine interne Verarbeitung zu übergeben. Das ffunktioniert dann auch für 404 Requests.

Wenn Dein Blog im Root-Verzeichnis Deiner Domain liegt (so etwas wie http://www.myblog.com) ist, suche den „location /“ Block in der Konfiguationsdatei und füge die folgende Zeile ein:

try_files $uri $uri/ /index.php?$args;

Hier prüft nginx die Existenz einer Datei für diese URL ($uri) und dann eines Verzeichnisses. Wenn nginx weder eine Datei noch ein Verzeichnis findet, führt er (welchen Artikel hat nginx eigentlich…?) eine interne Umleitung zur index.php durch und übergibt die Query-String-Argumente als Parameter.

Nach dem Bearbeiten sollte es so aussehen:

location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
}

Wenn Dein Blog in einem Unterordner ist (z.B. “ /blog“), solltest Du einen separaten „Location /blog/“-Block zu Deinem Konfiguratuionsfile hinzufügen :

location /blog/ {
    try_files $uri $uri/ /blog/index.php?$args;
}

Nachdem Du die Änderungen im Konfigurationsfile durchgeführt hast, lade dieses neu mittels:

nginx -s reload

Nun sollte sollten Deine Permalinks wunderbar funktionieren.

An manchen Stellen wirkt meine Übersetzung vielleicht etwas hölzern. Ich war mir bei einigen Formulierungen nicht sicher, wie ich sie im übertragenen Sinne übersetzen sollte.
Wer hierzu Verbesserungsvorschäge machen möchte, kann dies gerne tun! 🙂