Dec 23 2009
Apache: kein mod_rewrite bei existierender Datei
Ich bin mir sicher, eines der großen On-Page-SEO-Themen im nächsten Jahr wird sein, wie man die Auslieferung einer Seite beschleunigen kann. Es sollte geradezu offensichtlich sein, dass man am meisten in PHP-Programmen sparen kann, wenn man PHP erst gar nicht aufruft. Deshalb ist eine mögliche Idee, die generierten Seiten mittels PHP rausschreiben zu lassen und dann diese direkt auszuliefern.
Das möchte ich jetzt an einigen Stellen auch bei meinen Framework-Modulen forcieren. Da ich aber sehr stark auf mod_rewrite gesetzt habe, stellt sich die Frage, wie ich das am einfachsten bewältigen kann. Die Antwort liefert mir dieser Code:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
RewriteRule ^ %{DOCUMENT_ROOT}%{REQUEST_URI} [L]
Der macht nichts anderes wie dem Apache zu sagen: falls es eine echte Datei mit diesem Namen gibt, dann leite nicht auf andere Dateien - in meinem Fall PHP-Dateien - um. Sehr nützlich!
^




Ich finde in diesem Fall die negativen Tests einfacher:
RewriteCond %{REQUEST_FILENAME} ! -f
RewriteCond %{REQUEST_FILENAME} ! -d
RewriteCond %{REQUEST_FILENAME} ! -l
RewriteRule
Denn 1. ist REQUEST_FILENAME schon durch alle vorheringen Ersetzungen gelaufen, also funktioniert das Ganze auch mit Aliasen, anderen RewriteRules etc., 2. sind damit auch Verzeichnisse und symbolische Links abgedeckt (Die zweite oder dritte Cond können je nach Gusto auch weggelassen werden).
Da hat’s mir die Formatierung zerschossen … die letzte Zeile sollte lauten:
RewriteRule [wie auch immer ich zum skript komme]
Nur hatte ich spitze Klammern verwendet (d’oh).
Hm, das ist natürlich auch eine schöne Idee, weil dann könnte ich das auf ganz spezielle Fälle einfacher eingrenzen. Danke für den Hinweis.