Nachdem ich mich heute mal wieder etwas länger mit der Dokumentation über Apache’s Mod Rewrite beschäftigt habe, um ein intelligentes Seiten-Caching für mein CMS zu ermöglichen und ich aus Erfahrung weiß, dass die Rewrite-Syntax oftmals nicht ganz so intuitiv ist, stelle ich im Folgenden mal meine Lösung zur Verfügung:
In meinem konkreten Fall hatte ich mir folgendes Szenario überlegt:
Bei jedem Aufruf einer Seite soll zuerst überprüft werden, ob ein gerendertes HTML-Cache-File für die entsprechende Seite zur Verfügung steht — wenn JA, dann soll dieses ausgeliefert werden — wenn NEIN, dann soll sich mein CMS um die Auslieferung kümmern. Die Auslieferung des Server Caches soll nur erfolgen, wenn es sich um keinen POST Request handelt und keine GET Parameter an die URL angehängt wurden.
Und so sieht das in der .htaccess Datei aus:
# Enable mod rewrite
RewriteEngine On
RewriteBase /
# Server Caching
# Proceed only with HTTP GET requests without GET parameters
RewriteCond %{REQUEST_METHOD} ^GET$
RewriteCond %{QUERY_STRING} ^$
# Get the requested filename
RewriteCond %{REQUEST_URI} /(.*[^/])/?$
# Check if an cache file is available
RewriteCond %{DOCUMENT_ROOT}/cache/%1.html -f
# And if there is no real file with that name
RewriteCond %{REQUEST_FILENAME} !-f
# Deliver cache file to the browser and stop rewriting (QSA)
RewriteRule .* /cache/%1.html [L,QSA]
# If previous conditions fail, run PHP for output
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
Vielleicht erspart es dem ein oder anderen etwas Zeit :-)
Letzte Kommentare