IIS 重写规则以将查询字符串添加到 ASP.net 页面中的 .css 和 .js 引用?
Posted
技术标签:
【中文标题】IIS 重写规则以将查询字符串添加到 ASP.net 页面中的 .css 和 .js 引用?【英文标题】:IIS rewrite rule to add querystring to .css and .js references in ASP.net pages? 【发布时间】:2012-03-24 01:42:30 【问题描述】:是否可以将查询字符串附加到 CSS 和 JS 文件引用(例如,"foo.css" => "foo.css?v=", "goo.js" => "goo.js?v= ”,例如,“1.2.3”)作为入站规则的一部分在哪里?如果有,怎么做?
我们需要能够强制客户端在发布后要求提供最新版本的 CSS 和 JS 文件。重写规则似乎是执行此操作的好地方,但我没有任何文档或留言板发布有关此操作的信息。
谢谢!
【问题讨论】:
【参考方案1】:我使用以下 IIS 重写规则来执行此操作。您需要做的就是在进行更新时更改版本号。如果您有任何构建自动化,您也许可以在那里实现自动化。
<rewrite>
<rules>
<rule name="JS versioning" stopProcessing="true">
<match url="(.*).js" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="REQUEST_FILENAME" matchType="IsFile" />
<add input="QUERY_STRING" pattern="version=3911" negate="true" />
</conditions>
<action type="Redirect" url="R:1.js?version=3911" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
本质上,任何以 .js 结尾的 url 请求都会被拦截并重定向到相同的 url,但带有附加版本号的查询字符串。需要一个后续条件来忽略已经有查询字符串的url,否则会进入无限重写循环。
由于您也想对 css 文件进行版本控制,您可以将匹配 url 更新为匹配 js 和 css 的正则表达式,或者创建一个单独的规则来执行相同的操作但以 css 文件为目标。
【讨论】:
【参考方案2】:我认为您需要一个出站规则,以便缓存在版本号更改时请求新文件。
【讨论】:
【参考方案3】:我认为你不需要重写规则,你需要一个 HTTP 过滤器。 它需要动态解析和重写 HTTP 流上的请求。
MSDN documentation
O'Reilly sample
【讨论】:
谢谢。我会调查的。我现在正在做的是将 foo.css 的请求重写为 R:1)?v=blah 这似乎有效,尽管没有错误并不一定意味着我 100% 拥有它。 哇...那篇文章中的所有内容(两个链接都指向同一篇文章)似乎都在反对使用 HTTP 过滤器处理这种情况。多次提到“危险”一词,以提及进行任何响应操作。 :) 文档的日期是 2003 年。当时没有 http.sys 或集成的托管管道。自从 ASP.Net 模块/过滤器更加集成以来,IIS 有了很大的发展。但是泄漏代码很危险,所以清理你的内存。以上是关于IIS 重写规则以将查询字符串添加到 ASP.net 页面中的 .css 和 .js 引用?的主要内容,如果未能解决你的问题,请参考以下文章