AdWz WP-Plugin 9 – 500 Internal Server Error

(AdWz; Auf dem Weg zum) WP-Plugin 9 – 500 Internal Server Error

Der HTTP-Status-Code wird in Abhängigkeit der Anfrage auf 200 OK geändert. Wird keine Seite geschrieben und auch nicht die Einstellungen der Permalinks geändert läuft das Plugin ohne Probleme. Denn diese Aktionen der Administration verändern die .htaccess-Datei. WordPress wird nicht mehr funktionieren, alle Anfragen werden mit 500 Internal Server Error beantwortet.

Die nächste Erweiterung soll die von WordPress erzeugten mod_rewrite-Einträge in die .htaccess-Datei verhindern.

Damit die Permalinklösung über die Fehlerbehandlung funktioniert, sind die folgende manuellen Schritte erforderlich.

  • .htaccess-Datei anpassen
  • WordPress RewriteRules entfernen
  • ErrorDocument 404 $INSTALLATIONSVERZEICHNIS/index.php eintragen
  • schreibender Zugriff durch CHMOD 444 .htaccess unterbinden

Ohne diese Anpassungen würde WordPress nach Änderung der Permalinkstruktur oder Erstellung einer Seite folgende Fehlerseite anzeigen.

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, service@webmailer.de and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

Gegenüber den meisten anderen WordPress-Plugins ein manueller Installationsaufwand, der nicht unbedingt notwendig ist. Auch die nicht technisch begabten Blogger sollen dieses Plugin ohne viel Computerwissen – gibst die? :-) – installieren können.

Im folgenden wird das Plugin um diese Funktionalitäten erweitert.

Die Klasse WP_Rewrite wird durch die WordPress-Plugin-API für die mod_rewrite Regeln angeboten. Bevor die Regeln in der .htaccess-Datei gespeichert werden, wird der Filter ‚mod_rewrite_rules‘ aufgerufen. Diesem Filter werden die aktuellen .htaccess-Einträge übergeben und erwartet als Rückgabeparameter die zu schreibenden Einträge. Folgende Zeile meldet die Funktion mg404RewriteRule für diesen Filter an.

add_filter ('mod_rewrite_rules','mg404RewriteRule');

In der Funktion werden die Regeln mit den der Fehlbehandlung überschrieben und zurück gegeben.

function mg404RewriteRule ($ruleSet) {
 	return "ErrorDocument 404 /index.php";
 }

WordPress wird bei aktiviertem Plugin die erzeugten .htaccess-Einträge durch die Einträge der Funktion überschreiben. Die .htaccess-Datei wird in diesem Fall folgende Zeile enthalten.

ErrorDocument 404 /index.php

Für WordPress-Installationen im Wurzelverzeichnis ‚htdocs‘ des Webservers ist diese Änderung ausreichend. Oft wird das Blog in ein Unterverzeichnis installiert wie z.B. $htdocs/blog/. Die Referenz /index.php zeigt auf das Elternverzeichnis, in welchem nicht die index.php von WordPress ist.

Damit die Regeln auch in einem Unterverzeichnis funktionieren, sind noch einige Informationen notwendig. Das Blogverzeichnis muss mit angegeben werden, damit die Referenz zum ErrorDocument aufgelöst werden kann. Folgendes Zeile würde für das vorherige Beispiel funktionieren.

ErrorDocument 404 /blog/index.php

Die API ermöglicht durch die Funktion get_option den Zugriff auf grundlegende Einstellungen der WordPress-Installation.

Alle zur Verfügung stehende Einstellungen können über die Adresse $siteurl/wp-admin/options.php eingesehen werden.

Die Einstellung ‚home‘ enthält die URL des Blogs zum Wurzelverzeichnis. Die notwendige Information ist enthalten. Aber für die Konfiguration der .htaccess-Datei wird lediglich das Verzeichnis (u.a. ohne Protokoll), in dem WordPress installiert ist, benötigt.

Die PHP-Funktion parse_url extrahiert eine URL in folgende einzelnen Kompontenten.

  • scheme – z.B. http
  • host
  • port
  • user
  • pass
  • path
  • query – alles nach dem Fragezeichen ?
  • fragment – alles nach dem Textanker #

Der Pfad (path) wird in der folgenden Funktion verwendet, um die richtige Referenz zur Datei ‚index.php“ zu erstellen.

function mg404RewriteRule ($ruleSet) {
    $ruleSet = "ErrorDocument 404 " . parse_url(get_option('home'),PHP_URL_PATH) . "/index.php";
    return $ruleSet;
}

Diese Erweiterung erfordert keine manuelle Anpassungen mehr, um diese Plugin in WordPress zu installieren.

Die aktuelle Version des Plugins befindet sich auf der Homepage des Plugins.

Tags: , ,

Eine Antwort zu “AdWz WP-Plugin 9 – 500 Internal Server Error”

  1. Wacho Nochof sagt:

    Tjo, Sachverhalte konnen so trivial erscheinen! Danke :)

Hinterlasse eine Antwort