WordPress, PHP, JavaScript, Web 2.0, Gaming, Fotografie, Piratenpartei, Schießsport, Privates

WordPress und lighttpd, Permalinks mit URL rewriting

Di 24 Nov. 09 # Permalink

Ich nutze schon seit langem keinen Apache Webserver mehr, sondern lighttpd, da dieser schlank und performant ist. Einziger Nachteil ist in meinen Augen die fehlende Kompatibilität zu “.htaccess” Dateien, die bei vielen Open-Source Web-Anwendungen oft bereits mitgeliefert werden, um z.B. die URL’s für Suchmaschinen zu optimieren. Bei WordPress wird diese Funktion über die sogenannte “Permalink Struktur” realisiert. Einfach erklärt: Mittels URL rewrite wird eine eigentlich nicht existente URL trotzdem an die Web-Anwendung übergeben, ohne einen 404 Status Header zu senden. WordPress kann den passenden Inhalt dann anhand der definierten Permalink Struktur laden und anzeigen. Diese Funktionalität wollte ich bei keinem meiner Blogs missen und kann glücklicherweise auch recht einfach für lighttpd umgesetzt werden.

Lighttpd bietet hierfür die Möglichkeit in einem virtuellen Host eine URL rewrite Regel zu definieren. Im VHost von thegeek.de sieht das z.B. so aus:

# Auszug aus dem thegeek.de VHost
$HTTP["host"] =~ "(^www\.thegeek\.de)|(^thegeek\.de)" {
	url.rewrite =	(
				"^(/gallery/|/wp-.*|/xmlrpc\.php|/robots\.txt|/sitemap\.xml|.*\?album=[0-9]+&gallery=[0-9]+|.*\?p=[0-9]+|.*\?cat=[0-9]+|.*\?feed=|.*\?s=).*$" => "$0",
				"^" => "index.php"
			)
}

Die erste Regel greift bei den URL-Parametern des NextGen Gallery Plugins, den WordPress internen Verzeichnissen und Parametern, der Google-Sitemap, der robots.txt, sowie der XML-RPC und Feed Schnittstelle. Trifft die Regel zu, wird die URL auf keinen Fall umgeschrieben und so wie sie ist weitergegeben. Dies ist absolut notwendig, denn sonst würde z.B. “thegeek.de/wp-admin” auch umgeleitet und das Backend könnte nicht mehr aufgerufen werden.

Die zweite Regel leitet alle restlichen URL’s zur Index Datei von WordPress um, welche die URL dann interpretieren kann, um anhand der Permalink Struktur den richtigen Inhalt zu finden.

Im Grunde recht einfach und vorallem: Es funktioniert prima.

[Update 13. März 2012]

Etwas kürzer und besser mit NGGallery zusammenarbeitend, habe ich folgende Regel auf irgendeinem Blog im Internet gefunden. Klappt wunderbar mit allem, was ich bisher getestet habe. Auch die Suche macht bei den neuen WordPress Versionen dann keine Probleme mehr.

url.rewrite-once = (
	"^/(wp-.+).*/?" => "$0",
	"^/(sitemap.xml)" => "$0",
	"^/(xmlrpc.php)" => "$0",
	"^/keyword/([A-Za-z_0-9-])/?$" => "/index.php?keyword=$1",
	"^/(.+)/?$" => "/index.php/$1"
)


Flattr this

Willst du die Kommentare dieses Beitrags verfolgen, kannst du den Kommentar Feed abonnieren. Du kannst auch selbst einen Kommentar hinzufügen, oder einen Trackback von deiner eigenen Seite senden.

4 Kommentare zu “WordPress und lighttpd, Permalinks mit URL rewriting”

  1. Chrische sagt:

    Super, endlich was gefunden, was funktioniert.
    Habe das ganze noch ein wneig erweitert, so dass es auch bei mehreren WordPress-Installationen auf einem Server nicht unübersichtlich wird in der lighttpd.conf: http://www.chrische.de/2010/04/lighttpd-in-verbindung-mit-wordpress-und-rewrites/

  2. Danke für diese hilfreiche Anleitung! Ich war schon länger am Überlegen, ob ein Umstieg zu lighttpd lohnt, aber bisher hatte ich das wegen des Permalink-Problems eher verworfen.

  3. Henning sagt:

    Hallo,

    bin gerade auf dein Update zu den Permalinks gestossen. Ich gehe davon aus, dass die Regeln so ausgelegt sind, dass wordpress direkt im root installiert ist. Kannst du mir einen Tipp geben, wenn wordpress nun unter /wordpress liegt und lediglich die index.php im root liegt?

    danke und gruß
    henning

  4. Marc sagt:

    Ahoi Henning!

    Müsste so gehen (die ersten drei Regeln ändern):
    “^/wordpress/(wp-.+).*/?” => “$0″,
    “^/wordpress/(sitemap.xml)” => “$0″,
    “^/wordpress/(xmlrpc.php)” => “$0″,

Hinterlasse einen Kommentar

Name (Pflichtangabe)

E-Mail, wird NIEMALSNICHT veröffentlicht! (Pflichtangabe)

Webseite

Dein Kommentar