1

我正在为单页应用程序编写 HTML 页面,并希望将其发布到我当前的 ASP 主机,因此我使用 IIS URL 重写模块向 /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,而不是重写的。

4

1 回答 1

1

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

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

或者,您可以将重写的 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');
              }
    });
于 2013-07-14T07:17:21.907 回答