通过.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 中不起作用?
即使在 applicationHost.config 中允许,gzip 压缩也不起作用
带有 http/2 和 ssl 的嵌入式 Tomcat 的 Spring Boot 2.1,gzip 不起作用