Skip to main content

Comprimir con gzip & deflate mediante .htaccess

Con gzip y deflate es posible comprimir una página web completa. Esto sirve para una navegación más rápida (los archivos y documentos a descargar se reducen un 50% y más) y para ahorrar tráfico.

Si tu servidor no soporta gzip, tendrás que usar la opción deflate.

1. Comprimir Contenidos con deflate por tipo de archivo

# Deflate Compression by FileType
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-shockwave-flash
</IfModule>

[the_ad id=»4531″]

2. Configurar expiración de Caché a un mes

La fecha de expiración predeterminada de los archivos se configura a 1 mes.

# turns cache on for 1 month
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType text/html "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/xhtml-xml "access plus 600 seconds"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 month"
</IfModule>
<ifmodule mod_headers.c>
<filesmatch "\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</filesmatch>
<filesmatch "\.(css)$">
Header set Cache-Control "max-age=604800, public"
</filesmatch>
<filesmatch "\.(js)$">
Header set Cache-Control "max-age=216000, private"
</filesmatch>
<filesmatch "\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</filesmatch>
</ifmodule>

3. Comprimir Contenidos con deflate por extensión

# Deflate Compression by MimeType</span>
<IfModule mod_deflate.c>
<FilesMatch ".(js|jpg|jpeg|gif|png|css|txt|html)$">
ExpiresActive on
ExpiresDefault "access plus 1 month"
SetOutputFilter DEFLATE
</FilesMatch>
</IfModule>

4. Comprimir Contenidos con gzip

No todos los servidores soportan gzip. Si hay algún problema tienes que quedarte con la opción de «deflate», contactar tu proveedor de hosting o instalarlo por tí mismo (si tienes un servidor propio)…

# gzip Compression if availiable
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

Jens Wagner

Fundador de Fosforito.Net y aficionado de las tecnologías de información, del viajar y cocinar. Trabaja en la IT y mantiene éste blog actualizado desde 2012.

13 comentarios en “Comprimir con gzip & deflate mediante .htaccess”

  1. Hola! Muchas gracias por la información. Ya se que es un artículo antiguo pero te transmito un posible error:
    Donde está el código para «3.Comprimir Contenidos con deflate por extensión» hay un <pre> que sobra. Por lo menos yo lo subí y se me cayó la pagina, luego lo saqué y todo anduvo bien. Saludos.

  2. Hola! muchas gracias por el artículo !! Me ha sido muy útil. Podrías desarrollar un artículo explicando como comprimir html, css y javascript, y herramientas recomendadas para ello.

    1. Hola Karen, lo agregaré a mi lista de artículos futuros! Seguramente investigare esta semana para publicar el articulo la semana que viene 😉 Saludos!

  3. Hola. Disculpa mi torpeza, pero no sé cuál debe ser el contenido correcto del .htaccess. ¿Así debería quedar?

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

    # Deflate Compression by FileType

    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/atom_xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE application/x-shockwave-flash

    1. Hola Fran,

      tu .htaccess parece tener el formato correcto. Pero mejor sería si pones todas las líneas de «AddOutputFilter…» dentro de la etiqueta

      
      ...
      
      

      así como en el primer código del artículo. Así no tendrás errores de servidor cuando el módulo de compresión del servidor se desactive por cualquier razón.

      Saludos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.