使用重写映射时如何忽略.aspx扩展名?

时间:2014-12-11 01:13:24

标签: url-rewriting iis-7

我有一个重写地图,其中包含~100个旧网址到新网址行:

<rewriteMaps>
  <rewriteMap name="OldSiteRewriteMap" defaultValue="">
    ...
    <add key="/a/b/oldpage" value="/x/y/newpage" />
    ...
  </rewriteMap>
</rewriteMaps>

我有一个重写规则,使用该地图重定向网址(我们刚刚推出了一个新网站,我们将旧网站的网址映射到新网站上的相应网址):

<rule name="Redirect old site URLs">
  <match url=".*" />
  <conditions>
    <add input="{OldSiteRewriteMap:{PATH_INFO}}" pattern="(.+)" />
  </conditions>
  <action type="Redirect" url="{C:1}" redirectType="Permanent" appendQueryString="false" />
</rule>

当我访问http://example.com/a/b/oldpage(旧网站网址)时,我被重定向到http://example.com/x/y/newpage - 太棒了!但是当我访问http://example.com/a/b/oldpage.aspx - 注意.aspx扩展名时 - 我没有被重定向。

当我尝试使用重写映射映射URL时,如何告诉我的重写规则忽略“.aspx”扩展?

1 个答案:

答案 0 :(得分:0)

一位同事提出以下建议 - 使用“匹配网址”中的正则表达式来捕获除了可能的尾随“.aspx”之外的所有内容,然后将捕获传递给重写映射以代替PATH_INFO或任何其他服务器变量。似乎工作得很好。

    <rule name="Redirect old site URLs">
      <match url="^(.+?)(\.aspx)?$" />
      <conditions>
        <add input="{OldSiteRewriteMap:{R:1}}" pattern="(.+)" />
      </conditions>
      <action type="Redirect" url="{C:1}" redirectType="Permanent" appendQueryString="false" />
    </rule>