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

Bol*_*wyn 8 rewrite cache gzip apache-2.2

我希望 Apache 通过网络发送 gzip 压缩的静态文件,但也希望 Apache 不总是一遍又一遍地对它们进行 gzip。所以我想如果 .gz 文件存在的话,它是否不可能交付。这个设置:

文件结构:

static/
|
|--- style.css
|
\--- style.css.gz
Run Code Online (Sandbox Code Playgroud)

以及 .htaccess 中的以下内容:

mod_rewrite 规则:

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]
Run Code Online (Sandbox Code Playgroud)

而这个设置:

AddEncoding x-gzip .gz
Run Code Online (Sandbox Code Playgroud)

实际上,只要发送 .gz 文件而不是 .css 文件,如果请求转到/static/style.css. 问题只是,该文件作为“application/x-gzip”而不是“text/css”交付。使用 mod_rewrite 的 T 标志不会改变这一点。也没有明确的

AddType text/css .css
Run Code Online (Sandbox Code Playgroud)

有没有人有想法,我如何才能实现所需的行为?或者出于某种我不认为的原因是不必要的?

编辑:还有一个额外的困难:将原始文件发送给没有 gzip 支持的客户端。有谁知道这是如何工作的?

Sam*_*cke 5

将正确版本发送到不接受 gzip 的浏览器的解决方案是:

RewriteCond %{HTTP:Accept-Encoding} !gzip
...your rules here...
Run Code Online (Sandbox Code Playgroud)

此外,还有另一种更改类型的方法,即:

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

<FilesMatch .*\.js.gz>
    ForceType text/javascript
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

哈。