Mejora tu sitio, sólo cambiando el .htaccess

En muchas ocasiones los desarrolladores web no disponen de servidores dedicados sino que sólo tienen acceso a su propia cuenta a través de FTP o similar. Es por esto que estaría bien preparar un fichero de configuración que ya esté configurado a la hora de desarrollar un sitio…


<IfModule mod_deflate.c>
  SetOutputFilter DEFLATE
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip
</IfModule>
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^(.*)\.(\d+)(_m_\d+)?\.([^\.]+)$ $1.$4 [L,QSA]
</IfModule>
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/vnd.microsoft.icon "access plus 1 year"
  ExpiresByType text/css "access plus 1 year"
  ExpiresByType application/x-javascript "access plus 1 year"
  ExpiresByType application/javascript "access plus 1 year"
  ExpiresByType text/javascript "access plus 1 year"
</IfModule>

¿Qué significa cada una de estas cosas?

El primero bloque, el del mod_deflate básicamente lo que hace es activar el GZip. las otras líneas que hay son excepciones que en algunos navegadores no acaba de funcionar correctamente.

El tercer bloque, mod_expires lo que hace es automatizar el sistema de caché automático del Apache. En este caso, imágenes como PNG, JPG, GIF, ICO, CSS y JS quedarán cacheadas durante 1 año.

El segundo bloque (que lo he dejado al final por una razón) es la que va a permitir evitar que la caché no se pueda actualizar. ¿Y cómo se va a poder hacer esto? Pues está claro que, si alguien entra en tu sitio y le dices que una imagen se quede 1 año cacheada, y la cambias, esa persona durante un año no va a ver la imagen correcta. un caso donde se ve todo mejor es el CSS y JS.

Para eso podemos ejecutar algo como esto:

<link rel="stylesheet" href="estilos.20100529.css">

La línea del .htaccess lo que viene a decir es que cuando esto pase, realmente se ha de llamar al fichero estilos.css.

Categorías Javier, WPO

14 comentarios en “Mejora tu sitio, sólo cambiando el .htaccess”

  1. Hola,
    Gracias por compartir.
    Hace 2 semanas hice unas modificaciones en htaccess precisamente para lo que hoy comentas: mod_deflate y cacheo de imagenes… ¿Resultado? Al día siguiente todas las visitas que venían por Google Images se perdieron. Volvi al htaccess anterior pero nada. Dos semanas con 0 visitas por Google Images. Cuando antes había más de 1.000. ¿Qué te parece? Así que OJO…

  2. Hola Juan!

    Pues es la primera vez que alguien me comenta esto, porque yo llevo usando cosas similares desde hace varios meses y es todo lo contrario, el sistema me ha funcionado correctamente…

  3. Javier como haria para comprimir mi archivos en formato gzip en que forma lo hago, ya que el codigo para el gzip en el htaccess es el final, me podrias ayudar con ese tema. Gracias

  4. una duda

    la linea :

    y su cierre es para decir que si no sta activad0 ese modulo en tu apache, lo ignore verdad?

    creo que el hosting de mi wb no tiene activado algo…

  5. Hola Gabriel!

    Sí, normalmente los “IfModule mod_expires.c” y similares se usan para definir que “si está activado” lo ponga… porque si no lo estuviera, fallaría todo y dejaría de ir el sitio…

  6. A ver, complicado, lo que se dice complicado, no lo es… básicamente porque sólo tienen que quitar una # delante de esa línea, que estará comentada…

    Mi recomendación: cámbiate de hosting :P

  7. Gracias ;-)

    alguno bueno, bonito y barato en Madrid?

    en el que no te pongan pegas para quitar un # a un fichero?

  8. Pues, ni idea… la verdad es que da un poco igual que esté en Madrid o en cualquier parte de España… los españoles tenemos espanix y catnix que hacen que prácticamente cualquier usuario español navegue por cualquier web en españa a la misma velocidad… así que yo no me fijaría mucho en la localización, mientras sea en el propio país.

  9. Hola Javier la verdad estoy aprendiendo un poco mas de las optimizacion para sitios, ahora lo que yo quiero hacer es lo siguiente. Pues me gustaria preguntar como se hace esto
    Crossdownload para un site que tengo
    hostname sitio1 tiene aproximandamente 20 imagenes de las cuales 10 van a ser cargadas desde el mismo hostname sitio1 por los usuarios.
    Las otras 10 las quiero cargar desde hostname sitio2. Ahora que tengo que modificar que archivo ya sea htacces o cual para colocarles 1 año de cache pero solo para imagenes sea puede algo asi? tengo shared host pagado, ya que tengo una cuenta y esa cuenta general tiene un archivo htacces para todos mis directorios puedo colocarle a la carpeta sitio2 un archivo htacces y colocar tu codigo? Gracias espero tu respuesta pronto.

  10. Claro si, pero en realidad ya solucione ese problema, el problema grave que tengo para hacerlo es dificil. Por ejemplo yo cargo 10 de las 20 imagenes mediante el style.css el cual las llama dentro del mismo hostname, pero al cambiarle el url a las otras 10 imagenes en el style.css no las toma, esta bien colocada el url, pero existe algun problema con los .css cargando imagenes desde distntos hostname? nose que el problema que yo tenga sea por que uso wordpress y tenga algo raro en el codigo que no entiendo. Bueno gracias por tu respuesta =) y saludos

  11. Hola Javier, he subido el codigo tal cual lo pones a mi archivo htaccess pero me sigue saliendo el error (expiration not specified) al analizar la velocidad de carga en la herramienta de google.
    Por lo que interpreto que no hace efecto o ¿no es asi?

  12. Puede ser que no tengas los módulos activados, o que tu proveedor no te deje usar los .htaccess… prueba a meter la configuración en el VirtualHost y debería funcionarte :)

  13. Hola, si me lo permites, me encantaria hacerte una consulta sobre htaccess.
    Estoy creando una pagina en la que los usuarios pueden subir sus imagenes al servidor.Las carpetas que alojan las imagenes obviamente tienen permiso 777,
    pero aparte de la seguridad php que he aplicado, soy conocedor de htaccess y de sus virtudes desde hace muy poquito ( soy muy inquieto pero ignorante), decidí proteger mis carpetas con el siguiente codigo en htaccess:(me funciona)

    #para proteger de la ejecución de codigo malicioso en dichas carpetas
    php_flag engine off

    deny from all

    #para proteger el propio archivo htaccess

    order allow,deny
    deny from all

    pero yo necesito que no puedan siquiera meterlos en la carpetas por medio de cabeceras u otros sistemas y probé con lo siguiente pero no me funciona:

    php_value engine off
    AddType text/plain .htm .html .shtml .php

    Por favor , si me pudieras dar alguna orientación… se que aun me faltaria limitar el tamaño del archivo permitido y con eso estaria casi cubierto¿verdad?. Muchisimas gracias y enorabuena por tu página.

Deja un comentario