Regex 模式不适用于重写规则

Regex 模式不适用于重写规则,regex,iis,url-rewriting,url-rewrite-module,Regex,Iis,Url Rewriting,Url Rewrite Module,我有两种形式的相同URL(唯一的区别是?之前的最后一个斜杠),为此我需要创建一个模式(正则表达式)。所以相同的模式可以处理URL的两种变体 产品/分配器/毛巾?gclid=CPDv 及 产品/分配器/毛巾/?gclid=CPDv 我正在尝试使用下面的模式,它可以很好地用于第一个URL,但不能用于第二个URL ^products/([^/]+)/([^/]+)/?$ 我在模式下又尝试了几次,但没有成功 ^products/([^/]+)/([^/]+/.*|/?$) ^products/

我有两种形式的相同URL(唯一的区别是
之前的最后一个斜杠),为此我需要创建一个模式(正则表达式)。所以相同的模式可以处理URL的两种变体

  • 产品/分配器/毛巾?gclid=CPDv
  • 产品/分配器/毛巾/?gclid=CPDv
我正在尝试使用下面的模式,它可以很好地用于第一个URL,但不能用于第二个URL

  • ^products/([^/]+)/([^/]+)/?$
我在模式下又尝试了几次,但没有成功

  • ^products/([^/]+)/([^/]+/.*|/?$)
  • ^products/([^/]+)/([^/]+)(^/?)$
  • ^products/([^/]+)/([^/]+)/?$
通过使用相同的模式,我希望得到下面的输出,这是我通过第一个URL得到的

  • {R:1}分配器
  • {R:2}手巾?gclid=CPDv
从第二个网址,我需要得到下面的输出

  • {R:1}分配器
  • {R:2}毛巾/?gclid=CPDv
我有6种网址

  • 产品/分配器/毛巾?gclid=CPDv
  • 产品/分配器/毛巾/?gclid=CPDv
  • 产品/分配器/毛巾

  • 产品/分配器/手巾/手卷?gclid=CPDv

  • 产品/分配器/手巾/手卷/?gclid=CPDv
  • 产品/分配器/手巾/手卷

  • 因此,上述所有URL都将位于同一页面上,但如果前3个URL将被命中,则我需要
    分发器
    手巾
    作为R1和R2,如果第4、第5和第6个URL将被命中,则我需要
    分发器
    手巾
    手巾卷
    作为R1、R2和R3

    ^products/([^/]+)/([^/]+)/?$
    模式仅适用于1和2个URL,因为此模式无法识别URL 4、5和6的R3参数


    然而,
    ^products\/([^\/]+)\/([^\/]+)\/(.+)$
    模式对于第一个URL不起作用。

    您的问题是最后的
    $
    。这意味着
    行尾
    ,但您仍然需要匹配
    ?gclid=CPDv

    请看这里:

    被抓获的小组会给你线索

    你为什么不这样做呢:

    ^products\/([^\/]+)\/(.+)$
               ^^^R1^^   ^R2^
    
    这将为您提供所需的输出/捕获组

    如评论中所述的url

    ^products\/([^\/]+)\/([^\/]+)\/(.+)$
               ^^^R1^^^  ^^^R2^^^  ^R3^
    
    或者只有两组

    ^products\/([^\/]+)\/(?:[^\/]+)\/(.+)$
               ^^^R1^^^              ^R2^
    

    它似乎对这两个URL都有效,但是这里的哪个部分给出了{R:1}和{R:2},因为我需要使用这些r1和r2来创建新的URL。我需要在模式中为这个URL添加什么。产品/分配器/手巾/手巾卷/盖=CPDv@Fallenhero:谢谢你的努力。但是输出中仍然缺少一些部分,我已经更新了我的问题,以便更好地澄清,请参见。