gzip Komprimierung

Neulich sind wir im Zuge der Pagespeed Optimierung für einen Kunden auf folgendes Problem gestoßen: Die Apache-Module mod_gzip, mod_expires und mod_deflate stehen für die Komprimierung auf einem United-Domains-Webspace nicht zur Verfügung stehen, gab mir der Support zu verstehen.

Bei unserem Hoster 1&1 ist die Komprimierung einer Webseite leicht mit einigen Zeilen Code in der .htaccess Datei zu realisieren. gzip Komprimierung auf 1&1 Webspace

Aber United Domains schlägt dafür wenigstens eine Alternative vor. Zur Komprimierung lässt sich jede komprimierbare Datei als PHP-Script mit entsprechendem Header ausliefern. Dazu verwendet man eine PHP-Datei mit folgendem Inhalt Präfix:

1
2
3
<?php
ob_start('ob_gzhandler');
?>

In der .htaccess wird mit folgendem Beispiel-Code erreicht, dass die dort genannten Dateitypen entsprechend anders ausgeliefert und vorweg komprimiert werden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<FilesMatch "\.(css)">
    Header set Content-Type "text/css"
    ForceType application/x-httpd-php 
    php_value auto_prepend_file "/absoluter Pfad/Domainverzeichnis/gzip.php"  
</FilesMatch>
<FilesMatch "\.(js)">
    Header set Content-Type "application/javascript"
    ForceType application/x-httpd-php 
    php_value auto_prepend_file "/absoluter Pfad/Domainverzeichnis/gzip.php"  
</FilesMatch>
<FilesMatch "\.(htm|html)">
    Header set Content-Type "text/html"
    ForceType application/x-httpd-php 
    php_value auto_prepend_file "/absoluter Pfad/Domainverzeichnis/gzip.php"  
</FilesMatch>

Auf ähnliche Weise lassen sich Header mit Caching-Anweisungen für den Browser bestücken. Hier das vom Support genannte Beispiel, welches ich für meine Zwecke noch mit „Expires“-Anweisungen ergänzt habe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<IfModule mod_headers.c>
# 1 Jahr
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
 
# 1 Woche
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
 
# 3 Stunden
<FilesMatch "\.(txt|xml|js|css)$">
Header set Cache-Control "max-age=10800"
</FilesMatch>
 
# Niemals Cachen
<FilesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</FilesMatch>
</IfModule>

Die Lösung scheint ausreichend gut zu funktionieren und ist in jedem Fall mit weniger Aufwand verbunden als den Hoster zu wechseln.