dedlfix: *.img nicht umleiten

Beitrag lesen

Tach!

-s steht nicht für Symlinks, sondern für Dateien mit Größe > 0. -l steht für Symlinks.

Liest hier denn niemand mehr Doku?

Dazu hätte ich erstmal zu der Erkenntnis kommen müssen, dass meine Annahme nicht richtig ist. Ich lese nicht ständig im Handbuch nach, besonders dann nicht, wenn ich keine Zweifel verspüre. Das war nur einfach nicht genau hingeschaut. Das l hab ich als f interpretiert.

... Variante von Zend: Bei existenten Dateien wird nur exakt einmal gesucht und gefunden. Das macht das Ausliefern von existenten Ressourcen schnell. Rewriting auf die Applikation testet hingegen dreimal.

Deine Variante testet bei Rewrites auf die Applikation auch dreimal. Und bei Zugriffen auf existente Ressourcen ebenfalls.

Viermal, in beiden Fällen. Das Testen auf index.php nach dem Umschreiben musst du mitzählen.

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC]

Aber nochmal langsam zu mitschreiben, mir kommen jetzt nämlich Zweifel auf. Variante zwei bekommt einen Request auf eine existierende Datei. Die RewriteRule passt. Die Datei hat eine Länge > 0, -s ist true, negiert ist false. Die anderen Bedingen können das Ergebnis nicht mehr ändern. Wenn sie trotzdem ausgewertet werden, ist da kein Kurzschlussverfahren eingebaut. Die Regel wird ungültig. Ende.

Variante eins bekommt einen Request auf eine existierende Datei. Die erste RewriteRule passt. Die Datei hat eine Länge > 0, -s ist true. Die anderen Bedingen können das Ergebnis nicht mehr ändern. Wenn sie trotzdem ausgewertet werden, ist da kein Kurzschlussverfahren eingebaut. Das Rewriting wird aufgrund des -(dash) und L-Flags beendet.

Wo ist da jetzt mein Denkfehler?

Zusatzfrage, warum nicht nur .* sondern ^.*$ als Muster?

Zusatzfrage zwei, warum soll bei real existierenden Dateien der Länge 0 die Applikation das Handling übernehmen? "This file intentionally left blank", die Anwendung kann keinen $handler finden und liefert 404. Wer legt denn fest, dass das stets richtig ist?

dedlfix.