2013-09-26 48 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" 

都取得了與之相匹配,並得到了我,我一直在尋找的路徑前綴。