【问题标题】:Retrieving error 404 when asking for gzipped assets files要求 gzipped 资产文件时检索错误 404
【发布时间】:2012-03-02 21:04:57
【问题描述】:

我使用 gzip 压缩了 JavaScript 和 CSS 文件。 JS 文件在使用 gzip cmd 压缩之前已经被缩小。

如果浏览器兼容,现在我需要告诉 apache 提供这些文件的 gzip 版本。为此,我在 htaccess 中添加了几行代码,如下所示:

AddType "text/javascript" .gz
AddType "text/css" .gz
AddEncoding gzip .gz

RewriteCond %{REQUEST_FILENAME} \.(js|css)$
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ /$1.gz [QSA,L]

<FilesMatch .*\.js.gz$>
ForceType text/javascript
Header set Content-Encoding: gzip
</FilesMatch>
<FilesMatch .*\.css.gz$>
ForceType text/css
Header set Content-Encoding: gzip
</FilesMatch>

public_html里面的文件目录结构如下:

css/style.css
css/style.css.gz
js/customjsfn.min.js
js/customjsfn.min.js.gz
js/jquery.js
js/jquery.js.gz

在标题中,我已经包含了这样的 css 和 js 文件:

<link rel="stylesheet" href="http://example.com/css/style.css" />  
<script type="text/javascript" src="http://example.com/js/customjsfn.min.js"></script>
<script type="text/javascript" src="http://example.com/js/jquery.min.js"></script>

样式应用不正确。当我使用 firebug 检查响应代码时,它为我的文件返回 404。

我哪里出错了?

【问题讨论】:

  • 你有放气模块吗?您的 php ini 配置是否正确(如果使用)?
  • 您的网络服务器应配置为自动执行此操作。你确定这是必要的吗?你能和服务器管理员谈谈吗?
  • 我如何检查我们配置为执行此操作的服务器?
  • @Sekar 最简单的方法可能是询问服务器管理员。或者使用 Firebug 之类的工具查看任何 CSS 或 JS 资源的标题

标签: apache .htaccess


【解决方案1】:

这还不够吗?

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/xml application/xml text/css text/plain text/javascript application/x-javascript application/json
</IfModule>

【讨论】:

  • 因为我在 js 文件夹内有 javascript 文件并且 css 是 css/ 文件夹,所以我修改了这样的请求条件,RewriteCond %{REQUEST_FILENAME} \js/.js$ RewriteCond %{REQUEST_FILENAME} \ css/.css$ 并且它起作用了。但是我如何才能检查只提供 gzip 压缩的版本?
  • @Sekar - 相信我,您对此采取了很长的方法。这很简单,您不需要采取额外的步骤。这对您来说是额外的、不必要的工作。至于查看它们是否被压缩,请尝试检查您的标头。你有网址吗?我可以让你知道它们是否被压缩。
【解决方案2】:

没关系,你这样做完全错了。 (我认为,除非这实际上是一种合法的方式)。

您不应该创建压缩后的备用资源。网络服务器 (apache) 会自动为您压缩它们。您无需将用户重定向到压缩后的资产。

只需按照 Rodneyrehm 所说的添加 deflate 模块,其余的就交给它了。这可能就是您收到 404 错误的原因。不要创建 javascript.js.gz 文件。

看这个:

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

【讨论】:

  • 删除所有用于 gzip 压缩的 htaccess 条目并重新开始。您对一个非常简单的过程采取了错误/非常迂回的方法。
  • 谢谢巴里,这就是要走的路。我按照 rodneyrehm 所说的做了。我使用 firebug 检查了响应标头,我可以看到内容编码为 gzip。所以如果我编辑了其中的任何代码,我不需要重新压缩 js 文件..
  • 就个人而言,我仍然不会自己进行手动 Gzipping。只需让服务器在发送到浏览器时对 js 文件进行编码。
  • 但我听说 safari 不支持 gzip,有什么解决办法吗?
  • 是的...现在我删除了所有压缩版本。因为当我对 css/js 进行任何更改时,它会使我的工作加倍。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2017-03-01
  • 1970-01-01
  • 2020-01-04
  • 2018-05-06
相关资源
最近更新 更多