Ste*_*fan 3 apache mod-deflate mod-negotiation
我想保持我的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
<Location /packages>
FilterDeclare smgunzip CONTENT_SET
FilterProvider smgunzip INFLATE req=Accept-Encoding !$gzip
FilterChain smgunzip
</Location>
Run Code Online (Sandbox Code Playgroud)
[在这里使用Apache-2.2.22.]但结果实际上比前三行更糟糕:当我请求.tar.gz文件时,它现在返回而没有"Content-Encoding:",当我请求.tar文件时,我收到了tar.gz的内容(即仍然是压缩的),无论"Accept-Encoding:"标题如何,仍然没有"Content-Encoding:".
(确保你有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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |