2017-02-02 146 views
1

我有2種形式的相同的URL(只有差異是?之前的最後一個斜槓),並且我需要創建單個模式(正則表達式)。所以相同的模式可以處理這兩種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

,並從第二URL我需要得到下面的輸出

  • {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

因此,所有上面這些URL將登陸同一個頁面上,但如果前3個網址將被打,然後我需要dispenserHand-towel爲R1和R2,如果第4,第5和第6網址將被然後打我需要dispenserhand-towelhand-towel-roll作爲R1,R2和R3。

^products/([^/]+)/([^/]+)/?$^products/([^/]+)/([^/]+)/?$模式僅適用於1和2個URL,因爲此模式無法識別URL 4,5和R3的R3參數。

^products\/([^\/]+)\/([^\/]+)\/(.+)$模式不適用於第1個網址。

+0

@Fallen英雄:謝謝你的努力。 但輸出中仍缺少一些部分,我更新了我的問題以獲得更好的說明,請參閱。 – user3305540

回答

3

你的問題是$在最後。這意味着end of line但你有?gclid=CPDv你仍然想匹配。

在這裏看到:https://regex101.com/r/SkHXWH/2

拍攝的組會給你線索。

你爲什麼不只是這樣做:

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

這會給你想要的輸出/捕獲組

您提供的網址在評論

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

或聲明只有2組

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

它看起來對於兩個URL都有效,但是這裏給出的部分是{R:1}和{R:2},因爲我需要使用這些r1和r2來創建新的URL。 – user3305540

+0

我需要在Pattern中爲這個URL添加什麼。產品/分配器/手毛巾/手毛巾卷/?GCLID = CPDv – user3305540