Regex 模式不适用于重写规则
我有两种形式的相同URL(唯一的区别是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的两种变体
及产品/分配器/毛巾?gclid=CPDv
产品/分配器/毛巾/?gclid=CPDv
^products/([^/]+)/([^/]+)/?$
^products/([^/]+)/([^/]+/.*|/?$)
^products/([^/]+)/([^/]+)(^/?)$
^products/([^/]+)/([^/]+)/?$
{R:1}分配器
{R:2}手巾?gclid=CPDv
{R:1}分配器
{R:2}毛巾/?gclid=CPDv
产品/分配器/毛巾?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:谢谢你的努力。但是输出中仍然缺少一些部分,我已经更新了我的问题,以便更好地澄清,请参见。