让Apache自动解压缩文件,但仅在需要时

 落叶听声 发布于 2022-12-11 20:45

我想保持我的web服务器的所有静态文件在本地压缩,并根据请求压缩或不压缩它们.

在这些问题的答案我怎么能预先压缩与Apache 2.X的mod_deflate模块文件吗?,接近,因为实际上通过启用MultiViews并使用正确的AddEncoding,我可以让Apache foo.tar.gz在我请求时从我的web服务器返回压缩文件foo.tar,并且它带有正确的Content-Encoding:标头.

但这仅在客户端包含Accept-Encoding: gzip在发送到服务器的标头中时才有效.OTOH如果客户端不支持gzip编码,我的服务器告诉我,foo.tar对我来说没有"可接受" .

如果我使用它,我可以让Apache在发送之前解压缩该tarball AddOutputFilter INFLATE tar.但是,如果我这样做,那么服务器也会在我请求时foo.tar.gz(或者当我指定我接受gzip编码时)解压缩内容,这显然是我不想要的.

那么当客户端不支持gzip内容编码时如何让Apache解压缩文件,而在其他情况下如何提供预压缩文件呢?

编辑:根据@ covener的建议,我尝试了以下方法:

AddEncoding x-gzip .gz .tgz
RemoveType application/x-gzip .gz .tgz
AddType application/x-tar .tgz


  FilterDeclare smgunzip CONTENT_SET
  FilterProvider smgunzip INFLATE req=Accept-Encoding !$gzip
  FilterChain smgunzip

[在这里使用Apache-2.2.22.]但结果实际上比前三行更糟糕:当我请求.tar.gz文件时,它现在返回而没有"Content-Encoding:",当我请求.tar文件时,我收到了tar.gz的内容(即仍然是压缩的),无论"Accept-Encoding:"标题如何,仍然没有"Content-Encoding:".

1 个回答
  • (确保你有AddEncoding gzip或x-gzip gz或它会破坏)

    2.4:

    <Directory /home/covener/SRC/2.4.x/built/htdocs>
      Options +MultiViews
      MultiviewsMatch Any
      FilterDeclare gzip CONTENT_SET
      FilterProvider gzip INFLATE "! req('Accept-Encoding') =~ /gzip/"
      FilterChain gzip
    </Directory>
    

    2.2:

    <Directory /home/covener/SRC/2.2.x/built/htdocs>
      Options +MultiViews
      MultiviewsMatch Any
      FilterDeclare gzip CONTENT_SET
      FilterProvider gzip INFLATE req=Accept-Encoding !$gzip
      FilterChain gzip
    </Directory>
    

    2022-12-11 20:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有