我有一个重写地图,其中包含~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”扩展?
答案 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>