2011-02-04 26 views
0

我很难让URL重写规则正常工作。带有参数的IIS 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

您使用的是什么版本的ASP.NET?从.NET 4到以前的版本有很大的区别(坦率地说,在之前的版本中,URL重写很吸引人)。 – pearcewg 2011-02-05 03:19:56

+0

@pearcewg - 实际上,UrlRewrite是IIS的一个功能/扩展,与您运行的ASP.NET版本无关。如果您没有适当的基于ISAPI的重写器(如ISAPI_Rewrite或Iconic Rewriter),我认为您错误地认为您需要在IIS6上执行各种操作(通配符映射,httpmodules等)。 – Kev 2011-02-05 17:23:36

回答

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接口规则。

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> 

测试和工作。