通过.htaccess的Gzip压缩不起作用

Posted

技术标签:

【中文标题】通过.htaccess的Gzip压缩不起作用【英文标题】:Gzip compression through .htaccess not working 【发布时间】:2011-08-16 07:48:45 【问题描述】:

我一直在创建一个站点并通过 gtmetrix.com 检查它的速度。我使用以下.htaccess 文件来压缩.js, .css 和更多文件。

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

ErrorDocument 401 /401.php
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php

Options Indexes
IndexOptions FancyIndexing

ExpiresActive On
ExpiresDefault "access plus 7 days"
ExpiresByType application/javascript A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/javascript A2592000
ExpiresByType text/html A2592000
ExpiresByType text/xml A2592000
ExpiresByType text/css A2592000
ExpiresByType text/plain A2592000
ExpiresByType image/gif A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType image/bmp A2592000
ExpiresByType application/x-shockwave-flash A2592000

<FilesMatch "\.(html?|txt)$">
  ForceType 'text/html; charset=UTF-8'
</FilesMatch>

<FilesMatch "\.(css)$">
  ForceType 'text/css; charset=UTF-8'
</FilesMatch>

<FilesMatch "\.(js)$">
  ForceType 'text/javascript; charset=UTF-8'
</FilesMatch>

<FilesMatch "\.(css|js)$">
  Header append Vary Accept-Encoding
</FilesMatch>

但是当我运行页面测试时,它显示以下内容-----

Compressing the following resources with gzip could reduce their transfer size by 882B (48% reduction).

Compressing http://wooflux.co.cc/ could save 645B (48% reduction).
Compressing http://wooflux.co.cc/style.css could save 237B (51% reduction).

但我已经对我的.htaccess 文件进行了gzip 压缩。我不知道这里出了什么问题,顺便说一句,我对这种编码风格很陌生。所以请让我知道我是否犯了任何错误。

【问题讨论】:

【参考方案1】:

我没有使用 mod_gzip,但这是我的 .htaccess,我使用它通过 mod_deflate 压缩 .js、.css 和其他文件:

#Gzip
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x- javascript application/javascript
</ifmodule>
#End Gzip

如果您还不知道,Firebug 对于检查下载的内容是否被 gzip 压缩非常有用。单击 Firebug 中的“Net”选项卡,然后执行 shift-f5 以让 Firefox 重新加载所有 .js 和 .css 文件,以便它们显示在 Net 面板中。单击 .js 或 .css 文件旁边的“+”,然后单击“标题”选项卡。如果响应是 gzip 压缩的,您将在 Response Headers 部分看到“Content-Encoding gzip”。我认为 IE、Safari 和 Chrome 等价物提供相同的功能。

有one gotcha regarding gzipping .js and .css files on IE6 需要提防。我认为它只适用于 IE6 SP1 用户。

【讨论】:

顺便说一句,确保安装了 mod_gzip 和/或 mod_gzip Apache 模块。此外,您可能需要检查 Apache 错误日志中是否存在任何适用的错误。 我在 .htaccess 文件中使用了您的脚本,但出现内部服务器错误。【参考方案2】:

这是用于文件扩展名的语法。

<IFModule mod_deflate.c>
    <filesmatch "\.(js|css|html|jpg|png|php)$">
        SetOutputFilter DEFLATE
    </filesmatch>
</IFModule>

【讨论】:

【参考方案3】:

就我而言,mod_gzip 或 mod_deflate 即使在启用并将其写入 htaccess 文件后也无法正常工作。

然后,我最终在我的 php 文件中使用了“ob_gzhandler”,它帮助我压缩了我的 php 和 html 文件。这不如 mod_gzip 或 mod_deflate,但如果您无法在其他方面获得好运,则暂时为您服务。

在加载任何内容之前,我在 index.php 文件顶部使用的代码是,

<? ob_start("ob_gzhandler"); ?>

【讨论】:

你知道有没有办法让这个在 .js 文件中工作?

以上是关于通过.htaccess的Gzip压缩不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Gzip 压缩在 Elastic Beanstalk 上的 docker 中不起作用?

IIS 7.5 上的 GZip 压缩不起作用

即使在 applicationHost.config 中允许,gzip 压缩也不起作用

带有 http/2 和 ssl 的嵌入式 Tomcat 的 Spring Boot 2.1,gzip 不起作用

IIS 7.5 动态压缩不起作用 - NO_MATCHING_CONTENT_TYPE

通过 .htaccess 从 URL 中删除双斜杠不起作用