我很难让URL重写规则起作用。
我想要这个网址:
http://www.mysite.com/oldpage.aspx?oldid=123
重写为:
http://www.mysite.com/sub/newpage.aspx?newid=123
这是我所拥有的,但它不起作用:
<rule name="Old2New" stopProcessing="true">
<match url="^oldpage.aspx?oldid=([0-9]+)" />
<action type="Rewrite"
url="/sub/newpage.aspx?newid={R:1}"
appendQueryString="true" />
</rule>
我错过了什么?
答案 0 :(得分:1)
正则表达式索引从0开始而不是1.所以你的规则应该是:
<rule name="Old2New" stopProcessing="true">
<match url="^oldpage.aspx?oldid=([0-9]+)" />
<action type="Rewrite"
url="/sub/newpage.aspx?newid={R:0}"
appendQueryString="true" />
</rule>
您可以在IIS7界面中轻松测试规则。
答案 1 :(得分:0)
使用条件来捕获查询字符串部分{C:1},如下所示:
<rule name="My rule" stopProcessing="true">
<match url="^oldpage\.aspx" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="oldid=([0-9]+)" />
</conditions>
<action type="Redirect" url="/sub/newpage.aspx?newid={C:1}" appendQueryString="false" />
</rule>
经过测试和工作。