Webdev
Kommentare 3

Alternativen zu mod_gzip, mod_expires und mod_deflate auf United-Domains-Webspace

Da die Apache-Module mod_gzip, mod_expires und mod_deflate auf einem United-Domains-Webspace nicht zur Verfügung stehen, gab mir der Support folgende Alternativen:

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:

<?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:

<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:

<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.

3 Kommentare

  1. Christian sagt

    Hallo, vielen Dank für die schöne Beschreibung. Lange versuche ich Gzip zu aktievieren. Mit Ihrer Beschreibung hat es nun endlich funtioniert. Leider zerhackt es mir auch die ganze Webseite und alle Bilder werden dadurch nicht mehr geladen. Gibt es dafür eine Anleitung?
    Freundliche Grüße

    • Hallo Christian,

      häufig handelt es sich dabei um Fehler im obigen Code, z. B. wenn nicht korrekte Anführungszeichen verwendet wurden oder der Pfad nicht korrekt angepasst wurde.

      Dies solltest du einmal überprüfen, eine genauere Analyse ließe sich nur am lebenden Objekt vornehmen.

      Viele Grüße
      Marc

  2. Hallo Marc,

    Danke für deine Antwort.
    Inzwischen bin ich weiter gekommen. Ich nutze nun in der .htaccess folgenden Code um die Komprimierung anzuschieben

    php_value output_handler ob_gzhandler

    Header set Content-Type „text/css“
    ForceType application/x-httpd-php

    Header set Content-Type „application/javascript“
    ForceType application/x-httpd-php

    Header set Content-Type „text/html“
    ForceType application/x-httpd-php

    Hierbei werden die Daten vor der Ausgabe durch PHP komprimiert.

    Als weitere Möglichkeit können die Dateien bereits komprimiert auf dem Webspace abgelegt und durch mod_rewrite ausgeliefert werden

    Die Dateien können hierzu z.B. auf dem lokalen Rechner mit GZip komprimiert und auf dem Websapce übertragen werden. Hierzu kann nachfolgende mod_rewrite Regel verwendet werden:

    RewriteCond %{HTTP:Accept-Encoding} gzip
    RewriteCond %{REQUEST_FILENAME}.gz -f
    RewriteRule (.*\.(js|css))$ $1.gz [L]

    AddEncoding x-gzip .gz

    ForceType application/x-javascript

    ForceType text/css

    Die komprimierten Dateien müssen hierbei z.B. den Namen dateiname.css.gz oder dateiname.js.gz tragen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.