0

我正在解决一个 Web 应用程序问题,我们使用版本控制非嵌入式资源(例如脚本)来强制重新加载,尽管有任何客户端缓存。

该解决方案的一部分涉及使用 IIS Url Rewrite 获取脚本位置(由“src”指定)并将其重写为实际资源。因此,所服务的 we 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>

url 不会被重写,脚本也不会加载(因为它实际上并不称为“menu_1_1.js”)。如果我查看日志(有和没有 logRewrittenUrl = "true" ),我看不到任何表明它被触发的东西。

我错过了什么?

如果您可以帮助重写规则以保留任何相对路径信息,则可以加分(该规则适用于 src="../../jsmenu/menu_1_1.js" 或 src="../jsmenu/menu_1_1.js " 或其他任何内容,并且该路径保留在重写的 url 中)。

4

1 回答 1

0

问题是

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

实际上变成了一个

GET /jsmenu/menu_1_1.js

这与模式不匹配。

将模式更改为

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

两者都匹配,并为我提供了我正在寻找的路径前缀。

于 2013-09-27T04:22:08.567 回答