DirectoryIndex und "Cache-Control" zusammenbringen - gelöst

Alles, was den Apache betrifft, kann hier besprochen werden.

DirectoryIndex und "Cache-Control" zusammenbringen - gelöst

Postby White-Gandalf » 09. September 2012 06:42

Problem:

"DirectoryIndex" führt bekanntlich zu einer umgebungsabhängigen Reaktion - dem "Aufrufen" einer Index-Datei oder dem Listen eines Verzeichnisses oder auch einer Fehlermeldung. Index-Dateien kann man ganz nach Belieben vereinbaren. Leider wachsen die über die Jahrzehnte auch in ihrer Vielfalt entsprechend. Bei mir haben sich html- und php-Dateien recht unterschiedlicher Namen dafür angesammelt.

"Header set Cache-Control" steuert die entsprechenden HTTP-Header für die Cache-Steuerung. Soweit so schön.

Leider machen sich aber die per "DirectoryIndex" aktivierten Index-Dateien nichts aus den auf sie gemünzten "Header set Cache-Control", sondern nur etwas aus jenen "Header set Cache-Control", die für Directories gedacht sind.

Aus Kompromißgründen möchte ich unterschiedliche "max-age" für gewisse Dateitypen und Directory-Listings haben. Es funktioniert diesbezüglich alles richtig - AUSSER der Cache-Steuerung jener index-Dateien, die von "DirectoryIndex" aktiviert werden.

Gibt es eine Möglichkeit, auf diese Aktivierung durch den "DirectoryIndex" zu reagieren (also z.B. Environment-Variable setzen zu lassen)? Oder hat jemand eine gute Idee, wie man das Modul "mod_dir" komplett durch einen Satz von rewrite rules ersetzen könnte (DANN könnte ich die Zuordnungen einfach per redirect über den Client reflektieren lassen, worauf wieder korrekt die cache-control-Regeln zuschlagen würden)?

Zum letzteren kam mir bisher noch keine befriedigende Idee, weil "mod_dir" ja nun doch ein bißchen mehr macht:
1. Test, ob ein "hinten offener" Ressourcenname (ohne Suffix) eine Datei ist; wenn ja: diese servieren
2. (keine Datei, also Verzeichnis...) Test, ob eine index-Datei nach definiertem Schema existiert; wenn ja: diese servieren
3. (keine Datei, auch keine Index-Datei) Test, ob ein Servieren des Verzeichnisses erlaubt ist; wenn ja: dieses servieren (unter Beachtung all der Regeln, die in der Latte der quasi-XML-Regeln zu directories sich in der Apache-Konfiguration so angesammelt haben)
4. Fehlermeldung erzeugen

Wenn ich mir da einen Ersatz in PHP so durch den Kopf gehen lasse, sieht das schon wieder nach ganz schön viel Arbeit aus: Es müßte ja die Apache-Konfiguration geparsed werden, oder aber die Zugriffsrechte in zwei physisch getrennten Konfigurationsdatensätzen gepflegt werden.

Falls es da eine einfachere Möglichkeit gäbe, wäre ich dankbar...

====================

P.S.: So, da eine Lösung her soll, hab ich erstmal folgenden pragmatischen Ansatz gewählt:

1. Altlasten an Index-Datei-Varianten ausgedünnt und damit dafür gesorgt, daß ich einen Dateinamen für "Index-Datei-Redirectors" (so nenne ich die Dinger einfach mal) frei habe.
2. DirectoryIndex auf diesen einen reservierten Umleiter gesetzt, alles andere rausgeschmissen
3. Diesen Umleiter, der nichts anderes als einen redirect-Header auf die im jeweiligen Verzeichnis gültige und weiterhin von eventuellen externen Links erreichbar bleibende Index-Datei enthält, überall hin verteilt, wo er gebraucht wird

Gebraucht wird das Zeug nur für den Fall von HTML-Index-Dateien, da PHP-Dateien ihr eigenes Cache-Management bekommen haben (und unabhängig von DirectoryIndex auch durchsetzen können). Und weil das so ist, habe ich halt index.php als jenen "Index-Datei-Redirector" benutzen können. Damit bleiben die Änderungen insgesamt minimal.

Da ich Perfektionist bin, würde mich natürlich eine Lösung der Art, daß ich diesen Redirect schon intern "gegriffen" kriege, interessieren. Weil ich es durchaus gern hätte, nach außen hin (aus der Browser-URL-Zeilen-Sicht) das Directory-X für das Index-U vormachen zu können. Sieht bei bestimmten Anwendungen einfach besser aus.

Andererseits: NOTWENDIG ist es NICHT.

Nochmal andererseits: Wieso mache ich das jetzt eigentlich noch mit einem "redirect"?! Von php auf HTML! Ist doch arschlos!
Ich kann doch jetzt eh gleich aus der eh aufgedrängelten php-Index-Datei heraus die Cache-Steuerung übernehmen!
Ja, ich überarbeite die einfach nochmal, daß die eine Index-HTML-Datei unmittelbar ausliefert...

Hübsche Bastelei wieder mal...

===============

Ja: Genauso. Sogar noch einfacher als befürchtet: Ich lasse die restlichen DirectoryIndex-Einträge einfach wie sie jetzt sind (index.php index.html index.htm), weil die gezielt hoch angesetzte Default-Cache-Control-Einstellung für all jene Index-Dateien, die ich momentan gerade gar nicht anpassen will, sogar ausgerechnet korrekt sind: Eben weil die sich ja erstmal längere Zeit noch nicht ändern werden. Und die kleine Anpassung, sobald ich sie mache, unkritisch für den Inhalt ist.

Ja ja, die Lösung ist mal wieder in ein paar Minuten hingesetzt nach mehreren Stunden intensiven Recherchierens und Bastelns...
White-Gandalf
 
Posts: 10
Joined: 16. July 2006 12:09

Return to Apache

Who is online

Users browsing this forum: No registered users and 8 guests