我希望 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]
我仍然想听听其他人的解决方案和意见。