【发布时间】:2011-11-08 06:11:52
【问题描述】:
我不是生成指向file.js 的链接,而是计算版本号或哈希总和并链接到file--bbe02f946d.js。我正在使用以下重定向规则来提供文件的当前版本:
RewriteRule ^(.*)--[a-z0-9]+\.js$ $1.js
现在,我想为这些请求设置非常遥远的Expires 标头:
ExpiresActive on
ExpiresByType application/javascript "access plus 1 year"
这很好用,但也适用于尚未版本化的资源(/file.js 请求)。如何仅为与 RewriteRule 匹配的请求设置过期标头?通常,我会使用<LocationMatch>,但这不可用,因为应用程序必须能够在我可以修改 htaccess 的任意服务器上运行。
【问题讨论】:
-
我建议 1) 使用
[E]标志 (httpd.apache.org/docs/current/rewrite/flags.html#flag_e) 在重写规则中设置一些环境变量 .. 2) 然后使用 Header 根据此类变量值/存在设置适当的标头 -
如果上述方法不起作用并且您找不到任何其他可行的解决方案..那么也许您可以以某种方式从不同的文件夹中提供这些版本化和尚未版本化的资源 - 那么您可以轻松申请本地 .htaccess 文件中的此类标头。
-
@LazyOne 谢谢,我会尝试使用变量。太伤心了,你懒得写一个完整的答案;)
-
我不是一个真正的 Apache 人......而且我自己过去也没有这样做过——我“专门”研究 URL 重写规则。我可以自己尝试实现它.. 但我无法在工作之外访问我的开发 Apache 机器,而且几乎所有生产服务器都是 IIS 驱动的(是的 - 懒得在家中的某些虚拟环境上安装 Apache)。
标签: apache .htaccess mod-rewrite http-caching mod-expires