IIS重写,重写地图和查询string

请帮我理解重写地图,我有这样的设置:

<rewriteMap name="MyMap"> <add key="/pages" value="/website/pages/index.aspx" /> <add key="/pages/page-1" value="/website/pages/page-1/index.aspx" /> <add key="/pages/page-1/section-1" value="/website/pages/page-1/section-1.aspx" /> </rewriteMap> 

这是我的规则:

 <rule name="Rewrite rule for MyMap" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{MyMap:{REQUEST_URI}}" pattern="(.+)" /> </conditions> <action type="Rewrite" url="{C:1}" appendQueryString="true" /> </rule> 

这是工作,如果我尝试访问这些网页:

  • www.mydomain.com/pages(OK)
  • www.mydomain.com/pages/page-1(OK)
  • www.mydomain.com/pages/page-1/section-1(OK)

但是我想在这些页面上添加一个查询string的可能性,例如:

  • www.mydomain.com/pages?page=1(FAIL)

当我尝试访问这个页面时,我得到了一个404.我怎样才能得到这个工作?

默认情况下,使用重写映射的URL重写规则将在{REQUEST_URI}variables上创build。 这包括URL +查询string。 这允许您使用查询string参数匹配URL并将其重写到其他页面。 非常方便,但这显然不是你想要/需要的。

您只想匹配URL,不带查询string。 为了改变这种情况,您必须将条件中的{REQUEST_URI}replace为{URL} 。 然后只有URL(没有查询string)将与重写映射匹配。 然后,您可以将查询string添加到重写的URL,以便执行的脚本仍然可以访问它。

你最终会得到一个像这样的规则:

 <rule name="Rewrite rule for MyMap"> <match url=".*" /> <conditions> <add input="{MyMap:{URL}}" pattern="(.+)" /> </conditions> <action type="Rewrite" url="{C:1}" appendQueryString="true" /> </rule> 

而不是使用

 <add input="{MyMap:{URL}}" pattern="(.+)" /> 

你也可以试试

 <add input="{MyMap:{SCRIPT_NAME}}" pattern="(.+)" /> 

看这里:

无法获取静态redirect以使用IIS Url Rewrite 2.0