问题在于:我们有很多Javascripts和很多CSS文件,我们宁愿将其缩小。缩小很简单:设置YUI Compressor,运行Ant任务,然后吐出缩小的文件,我们将其保存在原件旁边。
因此,我们最终在DocumentRoot中的某个位置结束了以下目录结构:
/ /js /min 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结尾。
实际上,我正在设置构建脚本,以至于未在生产服务器上部署未分解的文件,但此配置在集成服务器和开发机器上仍然有用。
答案 0 :(得分: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 目录相同。
答案 1 :(得分:3)
您可以使用RewriteCond检测缩小文件的存在:
RewriteCond %{REQUESTURI} ^/js/(.*\.js)
RewriteCond js/min/%1 -f
RewriteRule %1 min/%1 [L]
答案 2 :(得分:0)
是否可以更改构建脚本?如果是这样,您可以将它们配置为缩小文件并为它们提供相同的文件名,但只有在提供了适当的标志时,例如ant productionDeploy
代替ant integrationDeploy
。这样,缩小过程对构建脚本以外的所有内容都是完全透明的。