2

这就是问题所在:我们有很多 Javascript 和 CSS 文件,我们宁愿将它们缩小。缩小很容易:设置 YUI 压缩器,运行 Ant 任务,它会输出缩小的文件,我们将它们保存在原始文件旁边。

所以我们最终在 DocumentRoot 的某个地方得到了以下目录结构:

/
   /js
      /分钟
         foo-min.js
         bar-min.js
      foo.js
      bar.js
      quux.js
   /css
      ...

现在我们需要的是 Apache 从min子目录提供文件,如果它们的缩小版本不可用,则回退到提供未压缩文件。最后一个问题是我无法解决的。

例如:假设我们有一个对example.com/js/foo.js的请求——在这种情况下,Apache 应该发送/js/min/foo-min.js的内容。没有缩小的 quux.js,所以对 /js/quux.js 的请求返回/js/quux.js本身,而不是 404。最后,如果没有/js/fred.js,它应该以 404 结束。

实际上,我正在以这样一种方式设置构建脚本,即未在生产服务器上部署未压缩的文件,但这种配置在集成服务器和开发机器上仍然可能有用。

4

3 回答 3

5

这是最终起作用的配置:

/js/.htaccess:

RewriteEngine On

RewriteBase /js

RewriteCond %{REQUEST_URI} ^/js/((.+)\.js)$
RewriteCond %{DOCUMENT_ROOT}/js/min/%2-min.js -f
RewriteRule ^(.+)$ min/%2-min.js [L]

对于css目录也是如此。

于 2008-10-28T13:46:14.620 回答
3

您可以使用 RewriteCond 来检测缩小文件的存在:

RewriteCond %{REQUESTURI} ^/js/(.*\.js)
RewriteCond js/min/%1 -f
RewriteRule %1 min/%1 [L]
于 2008-10-28T12:52:13.870 回答
0

是否可以更改您的构建脚本?如果是这样,您可以将它们配置为缩小文件并为它们提供相同的文件名,但前提是提供了正确的标志,例如,ant productionDeploy而不是ant integrationDeploy. 这样,缩小过程对除了构建脚本之外的所有内容都是完全透明的。

于 2008-10-28T12:43:16.850 回答