如何从IIS重写模块以JavaScript(或其他方式)获取重写的URL?

时间:2013-07-14 06:29:01

标签: javascript html iis iis-7 url-rewriting

我正在为单页应用程序编写HTML页面,并希望将其发布到我当前的ASP主机,因此我使用IIS URL Rewrite模块向/index.html发送大量请求。我发送给他们的是这样的:

<rule name="Section">
  <match url="sections/(.*)" />
  <action type="Rewrite" url="index.html?section={R:1}" logRewrittenUrl="true" />
</rule>

我想要做的是使用JavaScript获取重写的查询字符串,尽管这似乎是不可能的。静态html页面中有没有办法获取重写的查询字符串? window.location.href是原始URL,而不是重写的URL。

1 个答案:

答案 0 :(得分:1)

最简单的方法是简单地将重写的URL转储为响应正文的一部分:

<input type="hidden" id="__rewritten_url" value="<%=Request.ServerVariables("URL")%>" />

或者,您可以将重写的网址作为Response Header附加,然后发出Ajax请求并从中提取该标头。所以你的web.config看起来像是:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Section">
                 <match url="sections/(.*)" />
                 <action type="Rewrite" url="index.html?section={R:1}" logRewrittenUrl="true" />
            </rule>
        </rules>
        <outboundRules>
            <rule name="AppendRewrittenResponseHeader" patternSyntax="Wildcard">
                <match serverVariable="RESPONSE_URL" pattern="*" />
                <action type="Rewrite" value="{URL}" />
            </rule>
        </outboundRules>
    </rewrite>
</system.webServer>

然后在您的客户端(为了简洁起见使用jQuery):

$.ajax({
        type: "HEAD",
        url: location.href,
        success: function(message,text,response)
              {
              var myRewrittenUrl = response.getResponseHeader('URL');
              }
    });