2011-12-15 23 views
8

Ingresé lo siguiente en mi archivo ".htacces" para comenzar a almacenar en caché el contenido web. De acuerdo con Google Page Speed ​​e Yslow, las páginas aún no están en caché. ¿Están los módulos mal? ¿O es que las aplicaciones no muestran los datos correctamente?htaccess caching no funciona

sitio se ejecuta en Apache 2.0 en el servidor

.htaccess (parte con módulos de almacenamiento en caché):

# Expire headers 
<ifModule mod_expires.c> 
  ExpiresActive On 
  ExpiresDefault "access plus 1 seconds" 
  ExpiresByType image/x-icon "access plus 2592000 seconds" 
  ExpiresByType image/jpeg "access plus 2592000 seconds" 
  ExpiresByType image/png "access plus 2592000 seconds" 
  ExpiresByType image/gif "access plus 2592000 seconds" 
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" 
  ExpiresByType text/css "access plus 604800 seconds" 
  ExpiresByType text/javascript "access plus 216000 seconds" 
  ExpiresByType application/javascript "access plus 216000 seconds" 
  ExpiresByType application/x-javascript "access plus 216000 seconds" 
  ExpiresByType text/html "access plus 600 seconds" 
  ExpiresByType application/xhtml+xml "access plus 600 seconds" 
</ifModule> 
  
# Cache-Control Headers 
<ifModule mod_headers.c> 
#month 
  <filesMatch "\.(ico|jpe?g|png|gif|swf)$"> 
    Header set Cache-Control "max-age=2592000, public" 
  </filesMatch> 
#week 
  <filesMatch "\.(css|js)$"> 
    Header set Cache-Control "max-age=604800, public" 
  </filesMatch> 
#day 
  <filesMatch "\.(x?html?|php)$"> 
    Header set Cache-Control "max-age=43200, private, must-revalidate" 
  </filesMatch> 
</ifModule> 
# END Cache-Control Headers 
  
# Turn ETags Off 
<ifModule mod_headers.c> 
  Header unset ETag 
</ifModule> 
FileETag None 
  
# Remove Last-Modified Header 
<ifModule mod_headers.c> 
  Header unset Last-Modified 
</ifModule> 
+0

Marque los encabezados Expira enviados. Use la herramienta de desarrolladores de Chrome o la pestaña de red en Firebug. Podría ser que htaccess es deshabilitado o que mod_expires no está habilitado. – Gerben

Respuesta

19

Id a httpd.conf y busque la línea mod_expires, no debe ser comentada. Busque la línea mod_headers y asegúrese de que no esté comentada.

O (no para una aplicación crítica) no es una prueba fácil y sucio: eliminar <ifModule mod_expires.c> y </ifModule> licencia cosas en el medio, lo mismo que <ifModule mod_headers.c> y si el servidor falla con error de servidor 500 Internet, entonces su probable que falte uno o ambos de esos módulos y no están habilitados. Si es así, ingrese a httpd.conf y habilite lo que necesita.

También puede probar los encabezados de respuesta de su sitio usando una herramienta como REDbot. Simplemente elija una URL de recurso como una que apunta a una imagen y péguela en la herramienta para ver qué encabezados se envían de regreso junto con algunas recomendaciones. Tenga en cuenta que sigue las reglas de robots.txt del dominio y no revisará el recurso si no se permite.

Y al igual que Gerben, al usar la pestaña de la red en firefox, las herramientas chrome dev o alguna herramienta equivalente de desarrollador web ayudan a ver qué encabezados se envían y reciben.

Tampoco necesita establecer Cache-Control public. Y no necesita usar max age si también está usando llamadas ExpiresByType.

Para más información leer este gran tutorial: http://www.mnot.net/cache_docs/

y aprender con el ejemplo: la caja como se hace en el html5-boilerplate en https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess

Para otros ejemplos populares de configuración del servidor como lighthttpd, Node.js, Nginx, etc. .vea: https://github.com/h5bp/server-configs

+0

El ejemplo html5-boilerplate al que @Anthony se vincula en la parte inferior de esta publicación fue bastante útil. Por ejemplo, estaba escribiendo 'jpg' en lugar de' jpeg'. ¡Gracias por eso! –