2011-04-12 59 views
0

我试图使用UrlRewriter.net一些重写规则添加到我的ASP.NET web应用程序。问题是我是一个正则表达式新手,并且provided examples是非常基本的。UrlRewriter.net独家的正则表达式规则

我的问题是:我怎么区分包含GET查询参数的网址?

即,如果我添加此规则:

<rewrite url="~/([.+])" to="~/$1.aspx" /> 

它将改写www.example.com/productswww.example.com/products.aspx,但它也将改写www.example.com/products?id=1www.example.com/products?id=1.aspx。使用登录控件时

问题,实际上只发生,因为它创建类似www.example.com/login?returnUrl=/members一个网址,我不知道如何重写。

我想的是:

  • 改写www.ex.com/testwww.ex.com/test.aspx,并且
  • 改写www.ex.com/test?page=dummy

非常感谢!

而btw我还没有想到如何打开控制台调试UrlRewriter。我已经将“寄存器记录器”部分添加到配置文件中,但是VS输出窗口什么也没有显示。这也会有所帮助。

回答

0

使用下面的正则表达式匹配:

"~/([^\?]+)(.*)?"

这样你匹配的一切,直到问号 - 一个或多个字符是不是一个问号。

那么$ 1保持路径的一部分,和$ 2一切从 “?”直到URL的结尾。

通知第二分组后的问号括号 - 这意味着你不需要的那部分,所以www.ex.com/test也会起作用。

+0

这个问题解决了我的问题,但我也不得不做'Global.Application_EndRequest'处理一些重写,因为登录控件看到引擎盖下的URL重写,所以链接被网络表格中通常的POST搞砸。 – regexnewb 2011-04-13 10:44:15