Optimierte .htaccess fuer TYPO3 auf Apache2
Die .htaccess Datei welche standardmäßig in einer TYPO3 Installation (meist als _htaccess) mitgeliefert wird ist fuer Dokumentationszwecke besser geeignet als zum produktiven Einsatz.
- .htaccess
- eine .htaccess wird mit jedem File-Hit geparst, besser wäre es natürlich die Einstellung direkt in der Apache Konfiguration der VirtualHosts vorzunehmen. Das scheitert aber vermutlich meist an entsprechenden Rechten.
- Dadurch dass es geparst werden muss, sollte man die Datei klein halten. D.h. alle Kommentare entfernen.
- Die Direktiven sind „einfach so“ vorhanden. Besser ist es natürlich nur Direktiven zu verwenden, die der Apache auch durch die entsprechenden Modules eingebunden hat. D.h. <IfModule …></IfModule> sind zwingend verwenden um hässliche 500 Serverfehler zu vermeiden.
- Etag, Expiration und Compression Direktiven sind in der TYPO3 Vorlage nicht enthalten, bieten sich aber natürlich an. Der geneigte Websitebetreiber sollte dann natürlich die Module aktivieren (a2enmod headers; a2enmod deflate; a2enmod expires)
.htaccess
Hier die optimierte .htaccess (hier für RealURL-Verwendung, die _htaccess Dokumentation verliert natürlich nicht ihre Gueltigkeit bezüglich RewriteBase…)
<FilesMatch "\.(js|css)$"> <IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 7 days" </IfModule> FileETag MTime Size </FilesMatch> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L] RewriteCond %{REQUEST_URI} ^.+(/(uploads|fileadmin|(typo3(conf|temp)?))/.*) RewriteRule ^.*$ %1 [L,R=301] RewriteRule ^fileadmin/(.*/)?_recycler_/ - [F] RewriteRule ^fileadmin/(templates|ts)/.*(\.txt|\.ts)$ - [F] RewriteRule ^typo3conf/ext/[^/]+/Resources/Private/ - [F] RewriteRule ^typo3_src\-(.*)$ / RewriteRule ^(typo3/|t3lib/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L] RewriteRule ^typo3$ typo3/index_re.php [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l RewriteRule .* index.php [L] </IfModule> <IfModule mod_headers.c> FileETag Size </IfModule> <IfModule mod_expires.c> ExpiresActive on ExpiresDefault "access plus 24 hours" ExpiresByType image/x-icon "access plus 1 months" ExpiresByType image/jpg "access plus 1 months" ExpiresByType image/gif "access plus 1 months" ExpiresByType image/jpeg "access plus 1 months" ExpiresByType image/png "access plus 1 months" ExpiresByType text/css "access plus 1 months" ExpiresByType text/javascript "access plus 1 months" ExpiresByType application/javascript "access plus 1 months" ExpiresByType application/x-shockwave-flash "access plus 1 months" </IfModule> <IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-shockwave-flash BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary <IfModule mod_headers.c> Header append Vary User-Agent env=!dont-vary </IfModule> </IfModule>
Update 11.07.2013:
Es gab hier einen Fallstrick, der in dem Fall, dass mod_headers nicht installiert ist, im Block bzgl. mod_deflate einen Error 500 verursacht. Dies wurde mithilfe des verschachtelten „IfModule“-Blocks innerhalb des mod_deflate.c gefixed, sodass auch nur bei Vorhandensein des notwendigen Moduls die Header gesendet werden.
Ich schließe mich an: Vielen Dank, läuft!
Vielen Dank für den Code zur htaccess für Typo3. 😉 War genau das was ich für ein Serverumzug gebraucht habe.