我怎样才能让Apache gzip压缩工作?

我无法让我的网站使用gzip压缩。

我最近在css-tricks.com上观看了Chris Coyier的video 。 在video中,他谈到了启用gzip压缩以使网站运行更快。

根据他的说明,我通过html5boilerplate.com链接到github,从他们的.htaccess文件复制gzip压缩代码,粘贴到我自己的,并上传到我的网站。

我已经通过gzipwtf.comtesting过,它似乎不工作。 谁能帮我这个?

我的.htaccess文件如下所示:

# ---------------------------------------------------------------------- # Trim www # ---------------------------------------------------------------------- RewriteEngine On RewriteCond %{HTTP_HOST} !^orbitprint.com$ [NC] RewriteRule ^(.*)$ http://orbitprint.com/$1 [L,R=301] # ---------------------------------------------------------------------- # Gzip compression # ---------------------------------------------------------------------- <IfModule mod_deflate.c> # Force deflate for mangled headers 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 <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/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> 

尝试这个 :

 #################### # GZIP COMPRESSION # #################### SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip 

我试过了,比其他人想的要好…只需粘贴.htaccess文件,而不是在Google PageSpeed , Pingdom Tools和GTmetrics上检查加载时间。

 # Enable GZIP <ifmodule mod_deflate.c> AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </ifmodule> # Expires Headers - 2678400s = 31 days <ifmodule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 seconds" ExpiresByType text/html "access plus 7200 seconds" ExpiresByType image/gif "access plus 2678400 seconds" ExpiresByType image/jpeg "access plus 2678400 seconds" ExpiresByType image/png "access plus 2678400 seconds" ExpiresByType text/css "access plus 518400 seconds" ExpiresByType text/javascript "access plus 2678400 seconds" ExpiresByType application/x-javascript "access plus 2678400 seconds" </ifmodule> # Cache Headers <ifmodule mod_headers.c> # Cache specified files for 31 days <filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$"> Header set Cache-Control "max-age=2678400, public" </filesmatch> # Cache HTML files for a couple hours <filesmatch "\.(html|htm)$"> Header set Cache-Control "max-age=7200, private, must-revalidate" </filesmatch> # Cache PDFs for a day <filesmatch "\.(pdf)$"> Header set Cache-Control "max-age=86400, public" </filesmatch> # Cache Javascripts for 31 days <filesmatch "\.(js)$"> Header set Cache-Control "max-age=2678400, private" </filesmatch> </ifmodule> 

你的.htaccess应该运行得很好; 它依赖于四个不同的Apache模块(每个<IfModule>指令一个)。 我猜想以下之一:

  • 您的Apache服务器没有安装并运行mod_filter,mod_deflate,mod_headers和/或mod_setenvif模块。 如果你可以访问服务器configuration,请检查/etc/apache2/httpd.conf (和相关的Apacheconfiguration文件); 否则,你可以看到哪些模块通过phpinfo() ,在apache2handler部分(见附图)下载。 ( 编辑 )或者,你可以打开一个terminal窗口,并发出命令sudo apachectl -M将列出加载的模块;

  • 如果您的http 500内部服务器错误,您的服务器可能不被允许使用.htaccess文件;

  • 你正试图加载一个PHP文件来发送自己的头文件(覆盖Apache的头文件),从而“迷惑”浏览器。

无论如何,你应该仔细检查你的服务器configuration错误日志,看看有什么问题。 可以肯定的是,尝试使用Apache文档中build议的最快方式:

 AddOutputFilterByType DEFLATE text/html text/plain text/xml 

然后尝试加载一个大的文本文件(最好先清理caching)。

编辑 )如果需要的模块(在Apache模块目录中)但没有加载,只需编辑/etc/apache2/httpd.conf并为其中的每一个添加一个LoadModule指令。

如果所需的模块不存在(既没有加载,也没有在Apache模块目录中),我担心唯一的select是重新安装Apache(一个完整的版本)。

phpinfo()apache2handler部分

首先进入apache / bin / conf / httpd.conf ,并确保启用了mod_deflate.so。

然后转到.htaccess文件并添加以下行:

SetOutputFilter DEFLATE

这应该输出所有的内容作为gzipped,我已经尝试过,它的工作原理。

使用相同的.htaccessconfiguration来解决这个问题。 我意识到,我的服务器提供JavaScript文件作为text/javascript而不是application/javascript 。 一旦我添加text/javascriptAddOutputFilterByType声明,gzip开始工作。

至于为什么JavaScript被作为text/javascript :在我的根.htaccess文件的顶部有一个AddType 'text/javascript' js声明。 删除它(它已被添加错误)后,开始作为application/javascript

在我的情况下,我已经使用以下代码在Apache Web服务器中启用gzip压缩。

  # Compress HTML File, CSS File, JavaScript File, Text File, XML File and Fonts AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE application/x-httpd-php AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf 

我参考了http://www.tutsway.com/enable-gzip-compression-using-htacess.php

在我的情况下追加只有这条线的工作

SetOutputFilter DEFLATE

通过.htaccess启用压缩

对于大多数人来说,压缩是通过在其主机/服务器上添加一些名为.htaccess的文件来实现的。 这意味着去你的虚拟主机上的文件pipe理器(或无论你去添加或上传文件)。

.htaccess文件控制您的网站的许多重要的事情。

下面的代码应该被添加到您的.htaccess文件中…

 <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> 

保存.htaccess文件,然后刷新你的网页。

使用Gzip压缩工具检查您的压缩是否正在工作。