我需要在Apache上使用手动压缩解决方案。我的目标:
mod_deflate
的资格。)理想的功能就是这样:
file.ext
。file.ext.gz
:
Content-Encoding
设置为gzip
。Content-Type
设置为file.ext
( !!! )的值。file.ext.gz
。file.ext
。我测试了许多解决方案,this article包含一个很好的编译,但标有( !!! )的部分始终存在问题。我有成千上万的文件和几十种内容类型,因此我正在寻找一些自动解决方案,而不需要为每个文件添加ForceType
。
这是如何运作的:
file.ext
重命名为file.ext.en
file.ext.gz
配置Apache:
Options +MultiViews AddEncoding x-gzip .gz RemoveType .gz
几乎按预期工作,但它要求原始文件(file.ext
)不存在,并且它会添加许多(对我来说无用)标题(TCN
,Content-Language
等等)无法删除(Header unset
不删除它们)。
这是如何工作的:
- 创建file.ext.gz
文件。
- 配置Apache:
<pre>
RewriteEngine On
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)$ $1.gz [L]
AddEncoding x-gzip .gz
<Files file.ext>
ForceType my-custom/mime-type
</FilesMatch>
</pre>
这很有效,但每个压缩文件需要ForceType
。正如我之前所说,我不能依赖扩展,因为并非所有类型的文件都会被压缩。
mod_deflate
我没有对它进行太多调查,问题是如果文件太大,那么它会分成几块并以块的形式发送,并且不提供Content-Length
。增加压缩缓冲区的大小无法消除这个问题。
是否有可能将Apache配置为我喜欢的工作?
我尝试动态获取Content-Type
的{{1}}并将其设置为file.ext
,但我找不到如何执行此操作的方法。