htaccess文件中的缓存和gzip压缩

33

有人可以为我提供一个优化的.htaccess配置,用于处理典型网站的压缩、浏览器缓存、代理缓存等吗?

除了我的访客之外,我也想让Google PageSpeed感到满意。 我想通过.htaccess使用缓存和gzip压缩,请帮助我编写代码!

我想长时间缓存icon,pdf,flv,jpg,png,gif,js,css,swf文件。

我想将xml,txt文件缓存2天。

我想将html文件缓存2天。

我还想压缩我的html,txt,css,js,php文件,因为它们有较大的文件大小。

是否有方法可以使用.htaccess对图像进行gzip压缩?


1
使用gzip压缩图像并不是很有意义,因为GIF、JPEG或PNG已经是压缩格式。对它们进行压缩只会浪费服务器的CPU资源,而没有任何带宽上的收益。 - Mathieu Rodic
@hakre:除了这个家伙,我没有正确的答案! - Hamid
1
你是 @Hamid Seyyedi 吗?如果是的话,你的这个用户账户和 另一个账户 需要合并成一个账户。你不允许拥有两个独立的账户。 - Robert Harvey
5个回答

50
# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>

# 2 DAYS
<FilesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</FilesMatch>

# 2 HOURS
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, must-revalidate"
</FilesMatch>

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

@hakre:除了这个家伙,我没有正确的答案!睁开你的眼睛! - Hamid
2
<ifmodule>部分对我没用。当我在自己的网站上尝试时,出现了500错误!然而下面答案中的AddOutputFilterByType方法完美地解决了问题。这两种方法有什么区别? - maxxon15
3
Apache 1.3使用mod_gzip,而Apache 2.x使用mod_deflate。因此,请检查您的Apache版本,这很重要! - Andron

23

尝试这个:

<IfModule mod_deflate.c>
    #The following line is enough for .js and .css
    AddOutputFilter DEFLATE js css
    AddOutputFilterByType DEFLATE text/plain text/xml application/xhtml+xml text/css   application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php application/x-httpd-fastphp text/html

    #The following lines are to avoid bugs with some browsers
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

# BEGIN EXPIRES
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 10 days"
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType text/plain "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 week"
    ExpiresByType application/x-icon "access plus 1 year"
</IfModule>
# END EXPIRES

<IfModule mod_headers.c>
    <FilesMatch "\.(js|css|xml|gz)$">
        Header append Vary Accept-Encoding
    </FilesMatch>
    <FilesMatch "\.(ico|jpe?g|png|gif|swf)$">
        Header set Cache-Control "public"
    </FilesMatch>
    <FilesMatch "\.(css)$">
        Header set Cache-Control "public"
    </FilesMatch>
    <FilesMatch "\.(js)$">
        Header set Cache-Control "private"
    </FilesMatch>
    <FilesMatch "\.(x?html?|php)$">
        Header set Cache-Control "private, must-revalidate"
    </FilesMatch>
</IfModule>

2
在Apache 2.4中,要使用“deflating”,必须启用这两个模块:mod_deflate.so和mod_filter.so。 - Andron

2
您可以使用以下代码:
<Files *>
    #Compress

    SetOutputFilter GZIP

    #Caching

    Header set Cache-Control "max-age=3600, public"


</Files>

1

通过.htaccess启用压缩

对于大多数人来说,启用压缩需要在他们的网络主机/服务器上的一个名为.htaccess的文件中添加一些代码。这意味着要进入文件管理器(或者你去添加或上传文件的地方)。

.htaccess文件控制着你的网站的许多重要内容。如果你不熟悉.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 压缩工具 检查压缩是否生效。

1

如果您尚未使用以下规则,请在您的.htaccess文件中使用它。相信我,这将增加至少10分。

mod_gzip_on 是 mod_gzip_dechunk 是 mod_gzip_item_include 文件 .(html?|txt|css|js|php|pl)$ mod_gzip_item_include 处理程序 ^cgi-script$ mod_gzip_item_include 类型 ^text/.* mod_gzip_item_include 类型 ^application/x-javascript.* mod_gzip_item_exclude 类型 ^image/.* mod_gzip_item_exclude 响应头 ^Content-Encoding:.*gzip.*
AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html Header append Vary User-Agent
ExpiresActive 开启 ExpiresByType image/jpg "访问 1 年" ExpiresByType image/jpeg "访问 1 年" ExpiresByType image/gif "访问 1 年" ExpiresByType image/png "访问 1 年" ExpiresByType text/css "访问 1 个月" ExpiresByType text/html "访问 1 个月" ExpiresByType application/pdf "访问 1 个月" ExpiresByType text/x-javascript "访问 1 个月" ExpiresByType application/x-shockwave-flash "访问 1 个月" ExpiresByType image/x-icon "访问 1 年" ExpiresDefault "访问 1 个月"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接