如何配置 mod_rewrite 来提供缩小的文件(如果可用)?

发布于 2024-07-07 15:35:40 字数 743 浏览 8 评论 0原文

问题是:我们有大量的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风月客 2024-07-14 15:35:40

这是最终起作用的配置:

/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 目录相同。

Here is the configuration that finally worked:

/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]

Same for css directory.

天暗了我发光 2024-07-14 15:35:40

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

RewriteCond %{REQUESTURI} ^/js/(.*\.js)
RewriteCond js/min/%1 -f
RewriteRule %1 min/%1 [L]

You can use RewriteCond to detect the presence of a minified file:

RewriteCond %{REQUESTURI} ^/js/(.*\.js)
RewriteCond js/min/%1 -f
RewriteRule %1 min/%1 [L]
别靠近我心 2024-07-14 15:35:40

是否可以更改您的构建脚本? 如果是这样,您可以将它们配置为缩小文件并为它们提供相同的文件名,但前提是提供了正确的标志,例如 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 of ant integrationDeploy. That way the minification process is completely transparent to everything except the build script.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文