mod_rewrite für ein „MVC“-ähnliches Verhalten

mod_rewrite sollte jedem, der schon etwas Erfahrung im Bereich Webprogrammierung hat, ein Begriff sein. Es wird häuftig verwendet, um „SEO-friendly“ – also suchmaschienenoptimierte – URLs für dynamische Websites zu erzeugen. Auch das MVC-Modell sollte als geläufiges Entwurfsmuster bekannt sein. Nun braucht man aber nicht bei jedem Projekt MVC, denn kleine Projekte werden dadurch schnell sperrig; oft reicht auch einfach ein Umschreiben auf bestimmte URLs und die Verwendung einer Template-Engine. Leider konnte ich nirgends im Web ein Beispiel finden wie man jetzt genau http://domain.com/user/add in http://domain.com/user.php?action=add umschreibt.

Daher nun hier mein Bespiel einer .htaccess, die genau das ermöglicht:

1
2
3
4
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule   ^([^/]+)/?([^/]*)/?    /$1.php?action=$2

Die RewriteCond verhindert hier, dass Dateien, die wirklich über diese URL erreichbar sind, ebenfalls umgeschrieben werden (wäre schlecht für Bilder, CSS usw.). Wenn man das Muster ([^/]*)/? wiederholt anhängt kann das genutzt werden, um noch tiefere Pfade in weitere Parameter umzusetzen, z.B. würde

1
2
3
4
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule   ^([^/]+)/?([^/]*)/?([^/]*)/?    /$1.php?action=$2&param=$3

dafür sorgen, dass man auch http://domain.com/user/view/45 in http://domain.com/user.php?action=view¶m=45 umsetzen kann. So sind beliebige Pfadtiefen nutzbar.

Zu beachten ist, dass man im verarbeitenden Script die Parameter in $_GET nicht auf Existenz sondern mit Hilfe der Funktion empty() testen sollte, da automatisch leere Strings als Parameter übergeben werden falls der Pfad nicht die maximale Tiefe erreicht.

Drupal installiert

Ich habe mich endlich dazu durchringen können, meine Website neu aufzusetzen. Ist ja schlimm wenn man als Entwickler mit inzwischen gut 7 Jahren Erfahrung in Web-Programmierung nicht einmal eine anständige Seite hat. Nachdem ich etwas überlegt hatte fiel meine Wahl auf ein CMS als Plattform. Dann muss man nicht jedes Mal von Hand das HTML der Seiten ändern wenn man etwas hinzufügt etc., zumal ich auch gern mehrsprachige Artikel anbieten will.

Die Wahl des Content-Management-Systems fällt schon viel schwerer – schließlich gibt es gefühlte 50.000 davon. Joomla, Typo3 und WordPress kannte ich schon. Jedes dieser Systeme hat irgendwelche kleinen Macken bzw. bei Typo stößt mich einfach der gewaltige Aufwand ab. WordPress ist wiederum nicht so gut geeignet um statische Websites zu präsentieren, obwohl das mit Version 2.8 schon ganz gut klappt. Um mal was Neues zu probieren habe ich mich dann für Drupal – ebenfalls eins der bekanntesten 4 (Typo3, Joomla, WP und Drupal) – entschieden. Die Installation lief leicht von der Hand, das System ist danach erfreulich schnell (deutlich schneller als WP, zu Joomla fehlen mir auf meinem eigenen Server die Vergleichsdaten). Lediglich eine .htaccess musste ich nach der (direkt an der richtigen Stelle verlinkten) Anleitung erstellen schon funktionierte auch SEO. Das einzige was mich bisher etwas irritiert ist, dass ich zwar Deutsch bei der Installation auswählen konnte, jetzt aber trotzdem alles auf Englisch ist… na ja man kann nicht alles haben 😉