TYPO3-Seiten schneller ausliefern mit Static File Cache (nc_staticfilecache)
Mit der TYPO3-Extension nc_staticfilecahe werden TYPO3-Seiten, die ohne USER_INT- oder COA_INT-Objekte auskommen, also kompett in den Cache gelegt werden können, als HTML-Dateien auf dem Server abgelegt. Über Rewrite-Regeln mit mod_rewrite werden diese HTML-Dateien direkt vom Server ausgeliefert, ohne nochmal TYPO3 aufzurufen. Das ergibt eine deutliche Performance-Steigerung und Entlastung für den Server.
Installation und Konfiguration
Die Extension nc_staticfilecache ist einfach über den Extension-Manager zu installieren. Im Extension-Manager können auch die wenigen Konfigurations-Parameter der Extension eingestellt werden.
Passend zur unten stehenden .htaccess-Konfiguration werden die Einstellungen wie folgt gesetzt:
[clearCacheForAllDomains]: checked
[sendCacheControlHeader]: checked
[enableStaticFileCompression]: checked
[showGenerationSignature]: checked
[strftime]: cached statically on: %d-%m-%y %H:%M
[debug]: unchecked
[recreateURI]: unchecked
[markDirtyInsteadOfDeletion]: unchecked
mod_rewrite-Regeln in der .htaccess-Datei
Etwas schwieriger als die Installation und Konfiguration, kann sich das Anpassen der mod_rewrite-Einstellungen erweisen. Je nach Serverumgebung, muss eine der mitgelieferten .htaccess-Beispielkonfigurationen evtl. angepasst und dann an passender Stelle in die eigene .htaccess-Datei eingefügt werden.
Vor allem die Variable DOCUMENT_ROOT und die Schrägstriche um die Variablen HTTP_HOST und REQUEST_URI können hier Probleme verursachen.
Bei einer TYPO3-Installation auf einem Mittwald-Server können die mod_rewrite-Regeln aus den Beispielkonfigurationen im Extension-Verzeichnis übernommen werden.
Bei einer Installation auf den Servern von DomainFactory, beispielsweise bei jweiland.net, muss die Variable %{DOCUMENT_ROOT} durch den ausgeschriebenen Pfad zum Root-Verzeichnis der Installation ersetzt werden. Auch die Schrägstriche um die weiteren Variablen im Pfad müssen hier, wie im folgenden Beispiel angepasst werden. Die betreffenden Zeilen sind mit (1) und (2) im vorangestellten Kommentar gekennzeichnet.
Es werden die zur Konfiguration - mit RealUrl und Gzip-komprimierten Dateien - passenden Rewrite-Regeln verwendet.
.htaccess (Installation bei jweiland.net)
# ... z.B. Redirects und andere Einstellungen ...
# Rewrites
RewriteEngine On
#------------------------------------------------------------------------------
# beginning of static file cache ruleset
# Set gzip extension into an environment variable if the visitors browser can handle gzipped content.
RewriteCond %{HTTP:Accept-Encoding} gzip [NC]
RewriteRule .* - [E=TX_NCSTATICFILECACHE_GZIP:.gz]
# Don't cache HTTPS traffic. You may choose to comment out this
# option if your site runs fully on https. If your site runs mixed, you will
# not want https traffic to be cached in the same typo3temp folder where it can
# be requested over http.
# Enable this if you use a mixed setup.
#RewriteCond %{HTTPS} off
# We only redirect URI's without query strings
RewriteCond %{QUERY_STRING} ^$
# (1) It only makes sense to do the other checks if a static file actually exists.
RewriteCond
/www/123456_7890/rp-hosting/1234/5678/typo3cms/projektverzeichnis/typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}%{REQUEST_URI}/index.html%{ENV:TX_NCSTATICFILECACHE_GZIP}
-f
# NO frontend user is logged in. Logged in frontend users may see different
# information than anonymous users. But the anonymous version is cached. So
# don't show the anonymous version to logged in frontend users.
RewriteCond %{HTTP_COOKIE} !nc_staticfilecache [NC]
# Uncomment the following line if you use MnoGoSearch
#RewriteCond %{HTTP:X-TYPO3-mnogosearch} ^$
# We only redirect GET requests
RewriteCond %{REQUEST_METHOD} GET
# NO backend user is logged in. Please note that the be_typo_user cookie expires at the
# end of the browser session. If you have logged out of the TYPO3
# backend and are expecting to see cached pages but don't. Please close
# this browser session first or remove the cookie manually or use another
# browser to hit your frontend.
RewriteCond %{HTTP_COOKIE} !be_typo_user [NC]
# Check for Ctrl Shift reload
RewriteCond %{HTTP:Pragma} !no-cache
RewriteCond %{HTTP:Cache-Control} !no-cache
# (2) Rewrite the request to the static file.
RewriteRule .* /typo3temp/tx_ncstaticfilecache/%{HTTP_HOST}%{REQUEST_URI}/index.html%{ENV:TX_NCSTATICFILECACHE_GZIP} [L]
# Set proper content type and encoding for gzipped html.
<Files *.html.gz>
ForceType text/html
<IfModule mod_headers.c>
Header set Content-Encoding gzip
</IfModule>
</Files>
# end of static file cache ruleset
#------------------------------------------------------------------------------
# ... weitere Rewrite-Regeln ...
Test und Fehlersuche
Im Dateisystem
Nach Installation und Aktivierung der Extension werden die HTML-Dateien angelegt, sobald die Seiten in Frontend ohne BE-Login aufgerufen werden und von TYPO3 in die Cache-Tabellen geschrieben werden. Dann kann im Verzeichnis /typo3_temp/nc_staticfilecache/ nachgeschaut werden, ob die HTML-Dateien angelegt wurden.
Info-Modul
Im Modul WEB > Info im TYPO3-BackEnd gibt es ein Submodul, das Informationen über die angelegten HTML-Dateien zur Verfügung stellt. Hier werden auch Gründe aufgezeigt, falls das für einzelne Seiten nicht möglich ist.
Kommentar mit Zeitangabe am Dateiende
Wird bei der Konfiguration [showGenerationSignature] angehakt, so wird am Ende der generierten HTML-Datei die unter [strftime] angegebene Information als HTML-Kommentar angehängt. Beim Aufruf der Seiten in einem Browser ohne BE-Cookie kann nun in der Quelltext-Ansicht überprüft werden, ob die ausgelieferten Seiten tatsächlich aus den HTML-Dateien stammen.


