我正在为单页应用程序编写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。
答案 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');
}
});