2013-09-26 53 views
0

我正在解决与版本控制非嵌入式资源(例如脚本)有关的Web应用程序问题,强制重新加载,尽管有任何客户端缓存。IIS7 Url重写规则不会触发(对于脚本Src)

此解决方案的一部分涉及使用IIS Url重写来获取脚本位置(由'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中)创建了一个规则,完成了大量的IISreset,但似乎没有发生任何事情。

这里的规则:

<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

的问题是,

src="../jsmenu/menu_1_1.js" 

实际上成为

GET /jsmenu/menu_1_1.js 

和不匹配的格局。

变着花样

url="(.*)menu_([0-9]+)_([0-9]+).js" 

都取得了与之相匹配,并得到了我,我一直在寻找的路径前缀。