1

我很难让 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>

我错过了什么?

4

2 回答 2

2

使用条件来捕获查询字符串部分 {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>

测试和工作。

于 2017-10-26T09:24:33.683 回答
0

正则表达式索引从 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 界面中轻松测试您的规则。

于 2011-02-05T04:11:38.500 回答