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]

Joachim Schlöffel js at netsliders.de
Mit Jul 26 09:11:50 CEST 2006


Am 25.07.2006 19:18:55 schrieb(en) Hannes H.:
> Bei Lösung a) würde man das ganze per mod_rewrite durch die Gegend
> umschreiben und so alles auf ein Script
> /var/www/example.com/webroot/controler.php lenken, in dem dann die
> $_SERVER-Infos ausgewertet und entsprechend die Seiten geladen werden.
> 
> 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
> 
> 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.
> 
> 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.
> 
> 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.

Warum soll ich das nicht als CGI laufen lassen? Mit Hilfe von FastCGI und  
Lighttpd habe ich mit PHP als CGI auf einem System doppelt so schnelle  
Auslieferungszeiten wie mit Apache und PHP als Modul.

> Kleine Bemerkung am Rande: In meinen Projekten verwende ich nur diese
> Methode und in "user" würde dann lediglich als einzige Zeile ein
> require_once() stehen, welches das eigentliche Script aufruft, dass
> dann unterhalb des Webroots liegt. Vorteil: Wenn aus irgend einem
> Grund der Server falsch konfiguriert werden und die PHP-Funktionalität
> deaktiviert ist, wird zwar PHP-Source ausgeliefert, allerdigns
> lediglich eine Datei, in der ein require auf ein File unterhalb des
> Webroots zu finden ist - niemand kommt an den PHP-Source ran.

^^wenn der Server wiklich falsch konfiguriert ist und das keinem auffällt,  
kann man sich wohl kaum darauf verlassen.
Ich mag die Rewrite Engines auch nicht, löse das aber mit einfachen Aliases:

   alias.url = ( "/wiki" => "/home/www/domain.de/htdocs/foo/bar/xyz.php" )

-- 
  _____________________________________/ Multitasking ist, wenn ein Computer \
\ mehrere Leute mit Arbeit versorgt.  /
  -------------------------------------
       \                _
        \              (_)
         \   ^__^       / \
          \  (oo)\_____/_\ \
             (__)\       ) /
                 ||----w ((
                 ||     ||>>

php::bar PHP Wiki   -   Listenarchive