2017-02-02 2 views
1

Ich habe 2 Form der gleichen URL (nur Unterschied ist der letzte Schrägstrich vor ?) und dafür muss ich ein einzelnes Muster erstellen (regulärer Ausdruck). Das gleiche Muster könnte also beide URL-Varianten handhaben.Muster funktioniert nicht für Rewrite-Regel

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

Ich versuche, unten Muster zu verwenden, die für die erste URL funktioniert prima, aber nicht für die 2. URL zu arbeiten.

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

habe ich versucht, einige unten Muster, aber nicht den Erfolg bekommen haben.

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

ein gleiches Muster, das ich unter Output bekommen Durch die Verwendung, die ich bis zum 1. URL bekommen werde.

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

und vom 2. URL muss ich unten Ausgang

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

Ich habe 6 Art von URLs

  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

So alle oben URLs auf derselben Seite landen, aber wenn zuerst drei URLs dann getroffen werden, muss ich dispenser und Hand-towel als R1 und R2, und wenn die 4., 5. und 6. URLs werde ich getroffen werden dann benötigt dispenser, hand-towel und hand-towel-roll als R1, R2 und R3.

Während ^products/([^/]+)/([^/]+)/?$ Muster nur für 1 und 2 URLs ist, da dieses Muster den Parameter R3 für URL 4,5 und 6 nicht identifizieren kann.

Während ^products\/([^\/]+)\/([^\/]+)\/(.+)$ Muster für 1st URL nicht funktioniert.

+0

@Fallen Held: Danke für deine Mühe. Aber immer noch ein Teil fehlt in der Ausgabe, ich habe meine Frage zur besseren Klarstellung aktualisiert, bitte sehen Sie. – user3305540

Antwort

3

Ihr Problem ist die $ am Ende. Das bedeutet end of line aber Sie haben ?gclid=CPDv Sie wollen immer noch übereinstimmen.

Siehe hier: https://regex101.com/r/SkHXWH/2

Die erfassten Gruppen Sie den Schlüssel geben.

Warum gehst du nicht einfach dies tun:

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

dies wird Ihnen die gewünschte Ausgabe/Einfanggruppen

Für Ihre URL wie in Kommentar angegeben

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

oder mit nur 2 Gruppen

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

Es scheint, dass es für beide URLs funktioniert, aber welcher Teil hier gibt {R: 1} und {R: 2}, wie ich diese r1 und r2 benutzen muss, um die neue URL zu machen. – user3305540

+0

Was muss ich für diese URL in Pattern hinzufügen? Produkte/Spender/Handtuch/Handtuchrolle /? gclid = CPDv – user3305540

Verwandte Themen