55

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

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

按照他的指示,我通过 html5boilerplate.com 链接到 github,从他们的 .htaccess 文件中复制 gzip 压缩代码,粘贴到我自己的文件中,然后上传到我的网站。

我已经通过 gzipwtf.com 对其进行了测试,但它似乎不起作用。谁能帮我这个?

我的 .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>
4

10 回答 10

93

试试这个 :

####################
# 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
于 2012-09-11T10:44:26.907 回答
38

最好像下面的代码片段那样实现它。

只需将以下内容粘贴到您的.htaccess文件中,然后使用Google PageSpeedPingdom ToolsGTmetrics检查性能。

# 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>
于 2014-05-19T15:45:07.260 回答
11

您的 .htaccess 应该可以正常运行;它依赖于四个不同的 Apache 模块(每个<IfModule>指令一个)。我猜是以下之一:

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

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

  • 您正在尝试加载发送自己的标头(覆盖 Apache 的标头)的 PHP 文件,从而“混淆”浏览器。

在任何情况下,您都应该仔细检查您的服务器配置错误日志,看看出了什么问题。可以肯定的是,尝试使用Apache 文档中建议的最快方式:

AddOutputFilterByType DEFLATE text/html text/plain text/xml

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

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

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

phpinfo() apache2handler 部分

于 2012-09-11T12:46:50.717 回答
9

首先转到 apache/bin/conf/httpd.conf并确保 mod_deflate.so 已启用。

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

SetOutputFilter DEFLATE

这应该输出所有作为 gzip 压缩的内容,我已经尝试过了,它可以工作。

于 2016-01-11T12:08:59.777 回答
2

使用相同的 .htaccess 配置遇到了这个问题。我意识到我的服务器正在提供 javascript 文件text/javascript而不是application/javascript. 一旦我添加text/javascriptAddOutputFilterByType声明中,gzip 就开始工作了。

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

于 2014-09-26T21:13:25.640 回答
2

就我而言,我使用以下代码在 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

于 2015-05-31T03:25:29.663 回答
2

如果您的 Web 主机是通过 C 面板在 Apache C 面板上启用 G ZIP 压缩

转到 CPanel 并检查软件选项卡。

以前优化网站曾经可以工作,但现在有一个新选项可用,即“MultiPHP INI 编辑器”。

选择要压缩的域名。

向下滚动到底部,直到找到 zip 输出压缩并启用它。

现在再次检查 G ZIP 压缩。

您也可以按照视频教程进行操作。https://www.youtube.com/watch?v=o0UDmcpGlZI

于 2018-05-04T06:00:03.740 回答
1

就我而言,仅附加此行有效

SetOutputFilter DEFLATE

于 2015-04-14T07:41:37.983 回答
1

通过 .htaccess 启用压缩

对于大多数阅读本文的人来说,压缩是通过在其 Web 主机/服务器上的名为 .htaccess 的文件中添加一些代码来启用的。这意味着转到您的虚拟主机上的文件管理器(或您去添加或上传文件的任何地方)。

.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 压缩工具检查您的压缩是否正常工作。

于 2016-02-17T07:10:08.220 回答
1
<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>

<IfModule mod_deflate.c>
# Insert filters
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
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 application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE image/svg+xml

# Drop problematic browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>
于 2018-03-14T06:26:15.160 回答