Nach Upgrade alle Permalinks “kaputt”?

Um das kürzlich erschienene Wordpress 2.03 zu testen, hab ich meine Website auf eine Subdomain “kopiert” - um dort ein Upgrade von 1.52 auf die aktuelle Version durchzuführen. Das Upgrade als solches lief problemlos ab. Bloß nach dem Aktualisieren der Permalink-Struktur war plötzlich nur noch die Startseite des Blogs erreichbar - Alle internen Links (ob zu Pages, zu Beiträgen oder zu Kategorien) führten auf die 404er-Fehlerseite.

Ohne Permalink-Optionen gab’s zwar keinerlei 404-Fehler - Nur kann man bei der Aktualisierung eines bereits bestehenden Internet-Auftrittes nicht einfach plötzlich auf Permalinks verzichten: Es wäre mehr als ärgerlich, wenn auf einmal alle eingehenden Verlinkungen nicht mehr stimmen würden und man dadurch bei allen Suchmaschinen mit lauter ungültigen Links gelistet wäre.

Fehlersuche - Was hat sich geändert?

Die Permalink-Funktion von WP 2.03 erzeugt eine völlig andere .htaccess-Datei als die seines Vorgängers. Während Wordpress 1.52 brav für jede einzelne Verlinkung eine RewriteRule schreibt, was für eine reichlich lange .htaccess sorgt, gibt sich WP 2.03 überraschend sparsam:

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

Und die paar Zeilen .htaccess reichen augenscheinlich nicht aus*.

Alt gegen Neu: Nach Austausch der “neuen” (kurzen) .htaccess-Datei gegen eine “alte” (lange) war natürlich wieder alles soweit in Ordnung - jedoch nur bis zum erneuten Aktualisieren der Permalink-Struktur. Und diese wird beim Anlegen von neuen Inhalten automatisch aktualisiert, die .htaccess wird überschrieben, die Fehlermeldungen sind wieder da.

*Die beschriebenen Probleme mit Permalinks unter Wordpress 2.03 könnten mit einigen Server-Einstellungen zusammenhängen und tauchen sicherlich nicht bei jedem Webspace auf. Mit den Tipps der englischen Dokumentation kommt man nicht unbedingt weiter: Denn Im Regelfall liegt die Server-Konfiguration in den Händen des Webhosters.

Die Lösung:

Man muss das neue Wordpress dazu bringen, wieder dauerhaft und standardmäßig eine ebenso “ausführliche” .htaccess zu formulieren, wie es die ältere Version tut.

In der Datei “classes.php” (zu finden im Ordner “wp-includes”) werden in der Funktion mod_rewrite_rules() ab Zeile 1364 die Rewrite-Regeln festgesetzt - sofern die Abfrage, ob überhaupt Permalinks genutzt werden, bestätigt wird. Etwas weiter unten (Zeile 1379) stößt man auf die Bedingung

if ($this->use_verbose_rules) { ... }

… und wenn das zutrifft, schreibt Wordpress eine “ausführliche” .htaccess-Datei.

Anleitung:

Wenn Permalinks unter Wordpress 2.03 nicht funktionieren wollen, folgendermaßen vorgehen: Im Ordner “wp-includes” die Datei “classes.php” öffnen und dort die Zeile 880 bearbeiten:

var $use_verbose_rules = false;

Das ist zu ändern in

var $use_verbose_rules = true;

Die Datei speichern. Danach nur noch im Menü “Optionen”/“Permalinks” die gewünschte Struktur eintragen und den Button “Permalink Struktur aktualisieren” betätigen, damit die Änderungen auch von der .htaccess übernommen werden.

Der Server muss die .htaccess-Datei beschreiben können. Am Besten, man setzt mit seinem FTP-Programm die entsprechenden Rechte schon vorher.