Mailinglisten-Archive |
Hallo Hannes, Am Dienstag, 25. Juli 2006 19:18 schrieb Hannes H.: > Lösung b) umgeht das (von mir gehasste) Apache-Modul mod_rewrite. > Anstatt des Scripts controler.php kommt in > /var/www/example.com/webroot ein File mit dem Namen "user". Die > VirtualHost-Direktive (in httpd.conf bzw. apache2.conf) sieht wie > folgt aus: > > <VirtualHost 1.2.3.4:80> > ServerName example.com > ServerAlias www.example.com > <Directory /var/www/example.com/webroot> > <Files user> > ForceType application/x-httpd-apache > </Files> > </Directory> > </VirtualHost> > > Mit der ForceType-Direktive wird erzwungen, dass "user" als > PHP-Script interprediert wird, obwohl es keine mit AddType in > httpd.conf/apache2.conf definierte Endung besitzt. In dem Script > "user" kann dann wohl ähnlich wie in controler.php vorgegangen > werden. > > Und jetzt die Frage: Warum das alles? Die Vorteile aus meiner Sicht: > > 1. kein mod_rewrite > Durch den Verzicht auf mod_rewrite wird auf ein zusätzliches > Apache-Modul verzichtet, was durchaus einen positiven (aber wohl kaum > messbaren) Vorteil in der Performenz bingen wird. Außerdem ist jedes > nicht verwendete Modul ein sicheres Modul, welches keine Lücken haben > kann. Damit kann ich leben. Allgemeines Lebensrisiko. :-) > 2. nativer Zugriff auf alle Umgebungsvariablen > Da per HTTP tatsächlich die Datei "user" aufgerufen wird (und nicht > irgend eine rewrite-Rule), kann man sicher sein, dass man bei den > Werten der $_xxx [zB. $_SERVER]-Variablen keine bösen Überaschungen > erlebt, die vielleicht durch mod_rewrite tückisch versteckt sein > könnten. Gibt es da konkrete Beispiele? Mir erscheint dieses Argument nicht direkt nachvollziehbar. Zum einen kann ich bei der mod_rewrite-Lösung ebenso "nativ" auf die Umgebungsvariablen zugreifen, und zum anderen ist mir nicht klar, was da mod_rewrite an den Daten manipulieren sollte, so daß ich eine böse Überraschung erleben könnte. :-) > Wo Sonne ist, da ist auch Schatten ... > ...und der trifft uns bei meiner Lösung genau dann, wenn PHP als > CGI-Modul im Apache läuft (was IMHO nirgends mehr der Fall sein > sollte). Denn genau dann würde der Aufruf > http://www.example.com/user/#username# einen 404er hervorrufen, da > natürlich entsprechende Datei > /var/www/example.com/webroot/user/#username im Filesystem nicht zu > finden ist. Das ist schon mal ein Killerargument. Auf meinem Server läuft z.B. derzeit PHP4 als Modul und PHP5 als CGI. Meine Neuprogrammierung mache ich auf Basis von PHP5. Also habe ich da derzeit mit einem CGI-Modul zu tun. Jetzt kommt aber noch das Killerargument Nr. 2, welches zugleich ein ganz wichtiges Argument für mod_rewrite ist. Mit mod_rewrite kann ich ALLES ab DOCUMENT_ROOT umbiegen. Wirklich alles. Bei Deiner Lösung braucht man ja mindestens einen Dateinamen hinter dem Slash, den man zudem schon kennen muß. Bei meiner Website will ich aber alles umbiegen, ohne wissen zu müssen, was das sein wird. Ich will nur ein paar Dateien und Verzeichnisse im Hauptverzeichnis aus dem mod_rewrite ausnehmen. Vielleicht gibt es morgen ja eine neue Sprachversion meiner Website. Dann will ich nicht den x-ten ForceType-Eintrag machen müssen. :-) Ich finde die mod_rewrite-Variante von Jens eleganter und vor allem flexibler. :-) Viele Grüße Lutz
php::bar PHP Wiki - Listenarchive