Apache:发送预先打包的 gzip 文件

Apache:发送预先打包的 gzip 文件

我希望 Apache 通过网络发送经过 gzip 压缩的静态文件,但也希望 Apache 不要总是反复对它们进行 gzip 压缩。因此,我想如果存在 .gz 文件,是否不可能传送它。此设置:

文件结构:

static/
|
|--- style.css
|
\--- style.css.gz

.htaccess 中的以下内容:

mod_rewrite 规则:

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]

还有这个设置:

AddEncoding x-gzip .gz

实际上,如果请求转到 ,则只要发送 .gz 文件而不是 .css ,这种方法就行得通/static/style.css。问题只是,文件被传递为“application/x-gzip”而不是“text/css”。使用 mod_rewrite 的 T 标志不会改变这一点。显式

AddType text/css .css

有人知道我该如何实现所需的行为吗?或者由于某些我没有想到的原因,这是不必要的吗?

编辑:还有一个困难:将原始文件发送给不支持 gzip 的客户端。有人知道这该怎么做吗?

答案1

向不接受 gzip 的浏览器发送正确版本的解决方案大致如下:

RewriteCond %{HTTP:Accept-Encoding} !gzip
...your rules here...

另外,还有另一种方法可以改变类型,即:

<FilesMatch .*\.css.gz>
    ForceType text/css
</FilesMatch>

<FilesMatch .*\.js.gz>
    ForceType text/javascript
</FilesMatch>

嗨嗨。

答案2

啊,看来我找到了一个解决方案:如果在相同的规则上设置,T 标志将不起作用,但如果您使用它自己的规则,它肯定会起作用:

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz

RewriteRule \.css\.gz$ - [T=text/css]
RewriteRule \.js\.gz$ - [T=text/javascript]

我仍然想听听其他人的解决方案和意见。

相关内容