phpbar.de logo

Mailinglisten-Archive

[php] mod_rewrite ohne mod_rewrite [was: PHP und Subdomains]

[php] mod_rewrite ohne mod_rewrite [was: PHP und Subdomains]

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Jul 25 19:42:53 CEST 2006


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