Bagaimana cara mengaktifkan kompresi Gzip atau Deflate melalui .htaccess?

22

Bagaimana cara mengaktifkan kompresi Gzip atau Deflate melalui .htaccess dan mana yang terbaik hari ini? Diperlukan contoh kode.

dzhi
sumber

Jawaban:

15

HTML5 Boilerplate ( http://html5boilerplate.com ) menawarkan apa yang tampaknya menjadi pengaturan solusi terbaik dan paling efektif bersama dengan banyak yang lain seperti caching, tipe mime dll. Sangat dianjurkan.

<IfModule mod_deflate.c>

# Force compression for mangled headers.
# http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>


# Compress all output labeled with one of the following MIME-types
# (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
#  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
#  as `AddOutputFilterByType` is still in the core directives).

<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/x-web-app-manifest+json \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/plain \
text/x-component \
text/xml
</IfModule>

</IfModule>

EDIT: Karena pertanyaan dan jawaban ini terus terangkat setelah beberapa tahun saya menempatkan tautan konfigurasi server H5BP untuk pengoptimalan yang lebih lengkap .

EDIT: tautan tetap ke https://github.com/h5bp/server-configs-apache

dzhi
sumber
12

Lihat dokumentasi mod_deflate Apache , khususnya, contoh " kompres semuanya kecuali gambar ". Ini telah bekerja dengan baik untuk saya dan akan dimasukkan ke dalam .htaccessfile sebagai berikut:

<IfModule mod_deflate.c>
        # Insert filter
        SetOutputFilter DEFLATE

        # Netscape 4.x has some problems...
        BrowserMatch ^Mozilla/4 gzip-only-text/html

        # Netscape 4.06-4.08 have some more problems
        BrowserMatch ^Mozilla/4\.0[678] no-gzip

        # MSIE masquerades as Netscape, but it is fine
        # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

        # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
        # the above regex won't work. You can use the following
        # workaround to get the desired effect:
        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

        # Don't compress images
        SetEnvIfNoCase Request_URI \
        \.(?:gif|jpe?g|png)$ no-gzip dont-vary

        # Make sure proxies don't deliver the wrong content
        Header append Vary User-Agent env=!dont-vary
</IfModule>

Dan, tentu saja, pastikan Anda memiliki yang berikut dalam httpd.conffile Anda untuk mengaktifkan mod_deflate:

LoadModule deflate_module libexec/apache2/mod_deflate.so
bermoral
sumber
9

Saya mengaktifkan deflate pada aset statis di situs saya (berdasarkan tipe MIME) menggunakan yang berikut ini yang ditambahkan ke .htaccessfile di root public_htmldirektori saya :

<ifModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
  AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript application/json
</ifModule>

Anda juga dapat mengaktifkannya dengan ekstensi file, meskipun saya tidak memiliki sintaks untuk itu berguna.

Andrew Hedges
sumber