IIS7 Url重写规则未触发(对于Script Src)

时间:2013-09-26 17:25:51

标签: iis-7 url-rewriting

我正在解决我们对非嵌入资源(例如脚本)进行版本控制的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中。”

1 个答案:

答案 0 :(得分:0)

问题在于

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

实际上变成了

GET /jsmenu/menu_1_1.js

并且与模式不匹配。

将模式更改为

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

两者都匹配,并得到了我正在寻找的路径前缀。