HomeKontaktImpressum
Sie sind hier: Home

.htaccess – FilesMatch & Rewrite

Sowohl die im Dateisystem des Webservers abgelegten statischen Internetseiten, als auch die hierdurch verwendeten externen Seitenelemente – etwa Cascading-Stylesheets und JavaScript-Dateien – können vorkomprimiert an den Webbrowser ausgeliefert werden. Im Grunde funktioniert dieser Mechanismus auf recht einfache Weise: Mittels FilesMatch wird lediglich der Response-Header angepasst, während der Rewrite-Mechanismus unter bestimmten Umständen eine Umleitung einleitet.

Das neben dem einleitenden FilesMatch stehende String gibt die Endung an, für welche die Angaben gelten sollen. Dabei bedeutet beispielsweise die Angabe „\.css\.gz$”, dass Dateien, die auf .css.gz enden mit den entsprechenden Header-Informationen ausgeliefert werden. Der Backslash maskiert dabei den Punkt, der im angegebenen regulären Ausdruck ansonsten für ein beliebiges Zeichen stehen würde, zu einem konventionellen Zeichen. Mit dem Dollar-Zeichen ist in einem regulären Ausdruck das Ende einer Zeichenkette gemeint – hier bedeutet dies, dass die angegebene Zeichenkette am Ende des Dateinamens der angeforderten Datei stehen muss.

...
<FilesMatch "\.css\.gz$">
  ForceType text/css
  Header set Content-Encoding: gzip
</FilesMatch>
...

Mit den im letzten Block enthaltenen Zeilen wird unter bestimmten Voraussetzungen eine Umleitung der angeforderten URL umgesetzt. Die Voraussetzungen werden mittels der RewriteCond-Angaben festgelegt. In der ersten hier angegebenen Regel wird geprüft, ob der Webbrowser bei der Anfrage die Angabe Accept-Encoding gzip im Header verschickt hat. Damit teilt er dem Webserver seine grundsätzlich vorhandene Fähigkeit zur Verarbeitung von gepackten Dateien mit. Durch %{HTTP:Accept-Encoding} wird auf die entsprechende durch den Browser im Header der Anfrage verschickte Variable zugegriffen.

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

Als zweite Voraussetzung werden die Dateitypen, die überhaupt in komprimierter Form auf dem Server vorliegen, angegeben. Hier sollen alle vom Webserver auszuliefernden Dateien mit den Endungen .js, .css und .html von der Umleitung betroffen sein. Dies wird mittels des regulären Ausdrucks \.(js|css|html)$, der auf die URL der angeforderten Datei – durch die Zeichenkette %{REQUEST_URI}, wird auf die in einer Servervariablen gespeicherte URL zugegriffen – angewendet wird, geprüft. Auch hier gelten die Bedeutungen des maskierten Punktes und des Dollar-Zeichen. Der geklammerte Ausdruck legt alternative Zeichenfolgen fest, wobei die einzelnen Möglichkeiten durch das Pipe-Zeichen („|”) voneinander getrennt sind.

Nur wenn alle angegebenen Voraussetzungen zutreffen, erfolgt die Umleitung mit RewriteRule, indem die angeforderte URL einfach durch die Endung .gz erweitert wird. Aus einem „/styles/stylesheet.css” wird somit ein „/styles/stylesheet.css.gz” und eben diese Datei wird letztlich durch den Server ausgeliefert. Das [L] besagt, dass nach der Anwendung der Regel keine weiteren mehr zur Anwendung kommen sollen.

Für den Browser ändert sich durch diese Umleitung nichts. Die angeforderte Datei wird nur aus einer anderen Quelle entnommen, bleibt aber unter der selben URL erreichbar wie die unkomprimierte Datei. Dabei sollte stets darauf geachtet werden, dass die beiden Dateiversionen auch an den vorgesehenen Stellen im Dateisystem abgelegt sind. Fehlt die komprimierte Datei und der Browser gibt zu erkennen, dass er die gepackte Version nutzen kann, so wird die Anfrage mit einer Fehlermeldung quittiert.

Um solche Fehler zu vermeiden kann eine zusätzliche Voraussetzung angegeben werden, die allerdings den Overhead zur Auslieferung der Dateien verlängert:

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

Durch Einfügen der Zeile – sie gehört unmittelbar vor die Zeile mit der RewriteRule – wird vor der Umleitung zusätzlich geprüft, ob die gepackte Dateiversion überhaupt vorhanden ist. Ansonsten wird die ungepackte Datei ausgeliefert.

Seite 3 von 6 | « [1][2] • [3] • [4][5][6] »
  
© 2009-2019 Möglichkeiten zur Steigerung von Geschwindigkeit und Usability Ihrer eigenen Website