Apache - 提供预压缩的gzip文件不起作用

时间:2017-09-12 22:08:48

标签: javascript apache .htaccess mod-rewrite

我无法使用Apache(2.4)的重写规则来提供压缩文件。

我的javascript捆绑过程为它创建的每个.js生成.gz文件。我已经在apache a2enmod rewrite上激活了重写模块,并将.htacess文件设置为:

AddEncoding gzip .gz
RewriteEngine on

RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule "^(.*)\.js" "$1\.js\.gz" [QSA]

# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]

<FilesMatch ".+\.(js\.gz)$">
  Header append Content-Encoding gzip
  Header append worked yes   
</FilesMatch>

我正在运行的问题是:

  1. 第一个条件RewriteCond %{HTTP:Accept-encoding} gzip永远不会评估为true。在Chrome开发者工具上,客户端正在发送此标头Accept-Encoding:gzip, deflate, br(我已尝试将gzip,deflate,br添加到条件但不起作用);
  2. 即使我采取上述条件,我也无法在Chrome开发工具中看到标题Content-Encoding;
  3. 我在响应标头中看不到Content-length。但它以Transfer-Encoding:chunked回应我觉得很奇怪;
  4. 这些是在我的apache上启用的模块(我认为它们在我的ubuntu dist中默认启用,因为我没有激活任何这些模块)

    access_compat.load  authz_user.load  filter.load       rewrite.load
    alias.conf          autoindex.conf   headers.load      setenvif.conf
    alias.load          autoindex.load   mime.conf         setenvif.load
    auth_basic.load     deflate.conf     mime.load         status.conf
    authn_core.load     deflate.load     mpm_event.conf    status.load
    authn_file.load     dir.conf         mpm_event.load
    authz_core.load     dir.load         negotiation.conf
    authz_host.load     env.load         negotiation.load
    

1 个答案:

答案 0 :(得分:0)

你在那里的代码看起来是正确的,似乎在我的电脑上工作正常,这表明问题出在其他地方。我能想到的一些可能性:

  • 也许缓存服务器/反向代理正在弄乱事情(这是我的第一个猜测,除非你在localhost上测试或自己设置一切或者知道没有这样的服务器)。
  • 或者也许mod_deflate干扰了(我似乎没有在我的电脑上安装它,所以我无法测试它);如果您有权访问主服务器配置,可以尝试为LoadModule行注释掉它吗?
  • 如果任何子目录的.htaccess文件也使用重写规则,则父目录中的重写规则将不会运行。 (如果这是问题,RewriteOptions Inherit应该使用这些特定规则。但是,这不能解释分块编码。)
  • 在浏览器中强制刷新或清除缓存?