如何配置 mod_rewrite 来提供缩小的文件(如果可用)?
问题是:我们有大量的 Javascript 和 CSS 文件,我们宁愿将其缩小。 缩小很简单:设置 YUI 压缩器,运行 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 结束。
实际上,我设置构建脚本的方式是未缩小的文件不会部署在生产服务器上,但此配置在集成服务器和开发计算机上仍然可能有用。
Here is the problem: we have lots of Javascripts and lots of CSS files, which we'd rather be serving minified. Minification is easy: set up the YUI Compressor, run an Ant task, and it spits out minified files, which we save beside the originals.
So we end up with the following directory structure somewhere inside our DocumentRoot:
/ /js /min foo-min.js bar-min.js foo.js bar.js quux.js /css ...
Now what we need is that Apache serve files from the min subdirectory, and fallback to serving uncompressed files, if their minified versions are not available. The last issue is the one I cannot solve.
For example: suppose we have a request to example.com/js/foo.js — in this case Apache should send contents of /js/min/foo-min.js. There is no minified quux.js, so request to /js/quux.js returns /js/quux.js itself, not 404. Finally, if there is no /js/fred.js, it should end up with 404.
Actually, I'm setting build scripts in such a way that unminified files are not deployed on the production server, but this configuration still might be useful on an integration server and on development machines.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是最终起作用的配置:
/js/.htaccess:
与 css 目录相同。
Here is the configuration that finally worked:
/js/.htaccess:
Same for css directory.
您可以使用 RewriteCond 来检测缩小文件的存在:
You can use RewriteCond to detect the presence of a minified file:
是否可以更改您的构建脚本? 如果是这样,您可以将它们配置为缩小文件并为它们提供相同的文件名,但前提是提供了正确的标志,例如
ant productionDeploy
而不是ant IntegrationDeploy
。 这样,缩小过程对除构建脚本之外的所有内容都是完全透明的。Is it possible to change your build scripts? If so, you can configure them to minify the files and give them the same file name, but only when provided the proper flag, e.g.
ant productionDeploy
instead ofant integrationDeploy
. That way the minification process is completely transparent to everything except the build script.