我正在解决我们对非嵌入资源(例如脚本)进行版本控制的Web应用程序问题,以便在任何客户端缓存的情况下强制重新加载。
此解决方案的一部分涉及使用IIS Url Rewrite获取脚本位置(由'src'指定)并将其重写为实际资源。因此,我们提供的b页面将具有以下内容:
<script type="text/javascript" src="../jsmenu/menu.js?ver=1.1"></script>
或
<script type="text/javascript" src="../jsmenu/menu-1_1.js"></script>
并且重写规则将获取相应的客户端请求并将其转换为以下请求:
"../jsmenu/menu.js"
我已经安装了Rewrite模块,并使用UI创建了一个规则(然后出现在web.config中),完成了许多IISresets,但似乎没有任何事情发生。
以下是规则:
<system.webServer>
<rewrite>
<rules>
<rule name="VersionScripts">
<match url="../jsmenu/menu_([0-9]+)_([0-9]+).js" />
<action type="Rewrite" url="../jsmenu/menu.js" />
</rule>
</rules>
</rewrite>
</system.webServer>
网址没有被重写,脚本也没有加载(因为它实际上并没有被称为“menu_1_1.js”)。如果我查看日志(有和没有logRewrittenUrl =“true”),我没有看到任何表明它被触发的内容。
我错过了什么?
奖励积分如果您可以帮助重写规则以便保留任何相对路径信息(该规则无论是src =“../../ jsmenu / menu_1_1.js”还是src =“../ jsmenu / menu_1_1.js“或者其他什么,并且该路径保留在重写的URL中。”
答案 0 :(得分:0)
问题在于
src="../jsmenu/menu_1_1.js"
实际上变成了
GET /jsmenu/menu_1_1.js
并且与模式不匹配。
将模式更改为
url="(.*)menu_([0-9]+)_([0-9]+).js"
两者都匹配,并得到了我正在寻找的路径前缀。