模式不适用于重写规则

时间:2017-02-02 09:45:12

标签: regex iis url-rewriting url-rewrite-module

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

  • products/dispenser/hand-towel?gclid=CPDv
  • products/dispenser/hand-towel/?gclid=CPDv

我正在尝试使用以下模式,该模式适用于第一个URL但不适用于第二个URL。

  • ^products/([^/]+)/([^/]+)/?$

我在模式之下尝试了一些,但没有取得成功。

  • ^products/([^/]+)/([^/]+/.*| /?$)
  • ^products/([^/]+)/([^/]+)(^/?)$
  • ^products/([^/]+)/([^/]+)/?$

通过使用相同的模式,我想得到输出,我通过第一个URL获得。

  • {R:1} Dispenser
  • {R:2} hand-towel?gclid=CPDv

从第二个网址我需要得到输出

  • {R:1} Dispenser
  • {R:2} hand-towel/?gclid=CPDv

我有6种网址

  1. products/dispenser/hand-towel?gclid=CPDv
  2. products/dispenser/hand-towel/?gclid=CPDv
  3. products/dispenser/hand-towel

  4. products/dispenser/hand-towel/hand-roll?gclid=CPDv

  5. products/dispenser/hand-towel/hand-roll/?gclid=CPDv
  6. products/dispenser/hand-towel/hand-roll
  7. 因此,以上所有网址都会落在同一页面上,但如果前3个网址被点击,那么我需要dispenserHand-towel作为R1和R2,如果第4,第5和第6个网址将是然后我需要dispenserhand-towelhand-towel-roll作为R1,R2和R3。

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

    ^products\/([^\/]+)\/([^\/]+)\/(.+)$模式不适用于第一个网址。

1 个答案:

答案 0 :(得分:3)

您的问题最后是HTMLField。这意味着$,但您仍然希望匹配end of line

见这里:https://regex101.com/r/SkHXWH/2

被捕获的小组将为您提供线索。

你为什么不这样做:

?gclid=CPDv

这将为您提供所需的输出/捕获组

对于您在评论中所述的网址

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

或只有2组

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