serverseitiges Caching
hansilein
- php
Hallo,
ich möchte gerne ein serverseitiges Caching in meine Seite einbauen um bestimmte generierte Teile, die sich aber nicht alle paar Minuten ändern (vgl. dynamisch erstellte verschachtelte Listennavigation), in einer Datei speichern und diese eben nur bei Bedarf neu zu "rendern".
Soweit so gut.
Die Technik ist mir eigentlich auch klar, sprich: Gucken ob Teil bereits gecached falls ja einbinden falls nein neu generieren und cachen.
Doch nun ist mein Problem, dass ich mit mod_rewrite arbeite.
Wenn ich also domain.de/a/ aufrufe erhalte ich seite a und die Links und referenzierungen von Stylesheets etc. werden relativ zu a definiert und eben gecached.
Rufe ich allerdings domain.de/a auf wird auch die Seite a angezeigt, und die bereits gecacheden Bereiche werden einfach eingebunden, allerdings stimmmen dann die Relativen Pfade nichmehr aufgrund des fehlenden / nach domain.de/a.
Wie kann ich das Problem elegant lösen. Wie macht man das so inder gängigen server-Cache-Praxis? Oder Cache ich jede Seite mit ihrern Parametern und genauer aufgerufener URL. Sodass praktisch domain.de/a und domain.de/a/ 2 verschieden gecachde Dateien erhalten?
Gruß
Wenn ich also domain.de/a/ aufrufe erhalte ich seite a
Rufe ich allerdings domain.de/a auf wird auch die Seite a angezeigt
Exakt hier ist schon ein Fehler in deinem Aufbau. Sorge dafür, dass jede Seite nur unter einer URL erreichbar ist (der üblichen Konvention folgend wäre das hier wohl jene mit Schrägstrich) und leite die andere dorthin um.
Aber ganz allgemein:
Cache ich jede Seite mit ihrern Parametern und genauer aufgerufener URL.
Wenn der zwischengespeicherte Inhalt von Parametern abhängig ist, bleibt nichts anderes übrig, als diese Parameter ebenfalls zu speichern.
Falls du übrigens einen Apache 2 benutzt, könnte dir mod_cache die meiste Arbeit abnehmen.
Hallo,
vielen Dank für deine Antwort.
Wegen der erreichbarkeit eienr Seite unter mehreren URLs:
Das stimmt allerdings, das ist mir einleuchtend, dass ich die Seite nur einmal erreichbar machen muss und eben entsprechend weiterleiten muss. Danke. Dann muss ich aber, wenn ich mit mehreren Ebene arbeite, die durch / abgetrennt sind auch immer den "Pfad" zur aktuellen Seite mit überprüfen und beispielsweise, wenn ich domain.de/a/c aufgerufen wird auf domain.de/a/b/c/ weiterleiten oder? Ich meine wenn ich den Gedanken fortspinne mit der Errreichbarkeit von Seiten.
Das mit dem mod_cache werde ich mir mal genauer anschauen. Vielen Dank.
Gruß
Dann muss ich aber, wenn ich mit mehreren Ebene arbeite, die durch / abgetrennt sind auch immer den "Pfad" zur aktuellen Seite mit überprüfen und beispielsweise, wenn ich domain.de/a/c aufgerufen wird auf domain.de/a/b/c/ weiterleiten oder?
Ins Blaue hinein würde ich behaupten, dass ließe sich mit einer ganz kurzen mod_rewrite-Vorgabe erledigen, in etwa so:
RewriteCond %{REQUEST_URI} !.[a-z]+$
RewriteRule !/$ $1/ [R=301,L]
Die erste Zeile schließt Datei-URLs à la /a/b/grafik.png aus, die zweite leitet alles um, was noch übrig bleibt und nicht mit einem Schrägstrich endet.