我的url重写正则表达式有什么问题

时间:2014-05-10 14:48:22

标签: regex url-rewriting

我使用url重写。我添加了一些这样的规则:

<add name="Homes" virtualUrl="^/(.*).html" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1" ignoreCase="true" />
  <add name="HomeNew" virtualUrl="^/(.*)/(.*)/" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1&amp;idcnew=$2" ignoreCase="true" />
  <add name="HomeNewPage" virtualUrl="^/(.*)/(.*)/page-([0-9-]*).htm" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1&amp;idcnew=$2&amp;page=$3" ignoreCase="true" />
  <add name="HomeNewNew" virtualUrl="^/(.*)/(.*)/(.*)-([0-9-]*).htm" rewriteUrlParameter="ExcludeFromClientQueryString" destinationUrl="/Default.aspx?vsm=$1&amp;idcnew=$2&amp;idnew=$4" ignoreCase="true" />

我必须使用所有这些。 在HomeNewPage规则中,我用来获取目录新页面。在HomeNewNew规则中,我使用获取内容新的$ 3是新的url名称。 但是当转到这个链接:&#34; / News / Alert / page-2&#34;我的要求是&#34; vsm = News&amp; idcnew = Alertpage-2&#34; 我希望我的请求是&#34; vsm = News&amp; idcnew = Alert&amp; page = 2&#34; 请帮我!怎么了?以及如何解决它?

2 个答案:

答案 0 :(得分:1)

如果网址是

  • “/默认/新闻/警报/页-2.HTML”

    Regex:-  /(.*)/(.*)/(.*)/page-(.*).html
    
  • “/默认/新闻/警报/页-2”

    正则表达式: - /(.*)/(.*)/(.*)/ page - (。*)

    您可以将新网址设为/Default.aspx?vsm=$2&idcnew=$3&page=$4

基本上每个(。*)都指定像

这样的参数
  • 默认为$ 1
  • 新闻是$ 2
  • 提醒是$ 3
  • 但是我们已经对页面进行了硬编码 - 因此它不是一个参数。所以,(。*)在页面 - 之后出现了参数$ 4

如果我们采用你的第二个表达式^ /(。*)/(。*)/。在这种情况下,它可能会产生问题,如新闻/警报/页面2,因为它最终不是“/”。同样是.html的原因。 因为你没有提供网址,所以我不确定^。但只有当你的网址从第一个字符完成正则表达式时才会出现,但是,它不会导致任何问题。您可以指定或删除它。

答案 1 :(得分:0)

根据我的正则表达式:

/([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*)/page-([0-9-]*)\.htm

会奏效。但是这个表达

/([a-zA-Z0-9-]*)/([a-zA-Z0-9-]*)/"

不会工作,因为它包含第三个标签的争论(第2页)。但这将工作到/新闻/警报。请检查您的代码或尝试根据我调试它有一些硬编码完成。因此你会收到错误。

我会给你一个非常简单的方法来检测你的表情。在此之后,您将能够适当地验证您的表达。

转到此链接:http://www.rexfiddle.net/

然后插入表达式并在第二个窗口中插入所需的网址。在此之后你将获得最终捕捉1,捕获2,捕获3的捕获。这些将成为你的争论(1美元,2美元......)。请参见下面的屏幕截图:

Result_1st_expresssion