Header Expires per file htaccess

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2017, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Da un pò di tempo ormai la velocità del caricamento di un sito web è diventato un fattore SEO determinante.

Più un sito è veloce, più è veloce da fruire per qualsiasi cliente. Da questa logica, ne consegue che i motori di ricerca stanno "potenziando" tutti i siti che aderiscono a determinate regole per la velocità di caricamento.

Oltre ai meri fattori tecnici del server su cui è ospitato il sito ( ovvero, più il server ospitante è potente, più il sito stesso è veloce ), ci sono altri fattori determinanti per la velocità del sito.

Una di queste è il caching delle risorse fatto via browser. Una volta caricata una qualsiasi pagina del vostro sito, il browser del cliente "ha bisogno di sapere" cosa può salvare e riutilizzare per evitare di dover ri-scaricare risorse immagine, css o javascript che non hanno subìto modifiche dall'ultima volta che sono state scaricate.

Un sistema veloce e indolore per configurare il vostro server Apache per aumentare la velocità del sito è quella di usare il modulo "Expires" di Apache. Così facendo, Apache potrà rispondere, oltre ai dati della risorsa in output, anche altri header addizionali che faranno sì che il browser capisca "per quanto tempo" può cachare una risorsa.

<IfModule mod_expires.c>
	ExpiresActive on

	# Fallback per tutte le risorse non classificate
	ExpiresDefault                          "access plus 1 month"

	# cache.appcache per FF 3.6
	ExpiresByType text/cache-manifest       "access plus 0 seconds"
	
	# Documenti HTML
	ExpiresByType text/html                 "access plus 0 seconds"
	
	# Dati
	ExpiresByType text/xml                  "access plus 0 seconds"
	ExpiresByType application/xml           "access plus 0 seconds"
	ExpiresByType application/json          "access plus 0 seconds"

	# Feed RSS
	ExpiresByType application/rss+xml       "access plus 1 hour"

	# Favicon
	ExpiresByType image/x-icon              "access plus 1 week"

	# Media: immagini, video, audio
	ExpiresByType image/gif                 "access plus 1 month"
	ExpiresByType image/png                 "access plus 1 month"
	ExpiresByType image/jpg                 "access plus 1 month"
	ExpiresByType image/jpeg                "access plus 1 month"
	ExpiresByType video/ogg                 "access plus 1 month"
	ExpiresByType audio/ogg                 "access plus 1 month"
	ExpiresByType video/mp4                 "access plus 1 month"
	ExpiresByType video/webm                "access plus 1 month"

	# HTC files  (css3pie)
	ExpiresByType text/x-component          "access plus 1 month"

	# Webfonts
	ExpiresByType font/truetype             "access plus 1 month"
	ExpiresByType font/opentype             "access plus 1 month"
	ExpiresByType application/x-font-woff   "access plus 1 month"
	ExpiresByType image/svg+xml             "access plus 1 month"
	ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

	# CSS e JavaScript
	ExpiresByType text/css                  "access plus 1 month"
	ExpiresByType application/javascript    "access plus 1 month"
	ExpiresByType text/javascript           "access plus 1 month"

	<IfModule mod_headers.c>
		Header append Cache-Control "public"
	</IfModule>
</IfModule>

Il pezzo di codice qui sopra è da copia-incollare all'interno del file .htaccess principale del vostro sito.

Nel caso in cui questa tecnica non stia funzionando ( per verificarlo, controllare gli header di risposta di tutte le risorse del vostro sito tramite gli Strumenti Sviluppatore del vostro browser ) può voler dire che Apache non ha il modulo "mod_expires" compilato ed attivato, oppure che c'è qualche altro plugin ( per esempio su Wordpress ) o pezzo di codice che sta di fatto sovrascrivendo il behaviour del mod_expires di Apache.

Si avverte che le modifiche fatte al file .htaccess possono essere potenzialmente distruttive per la funzionalità del vostro sito, rendendolo non disponibile in caso di errori di battitura o di formattazione. Nel caso in cui ciò dovesse accadere, noterete che il server vi risponde con un "Errore 500".

Prima di effettuare modifiche, quindi, fate sempre un backup preventivo.