2017-02-02 15 views
1

У меня есть 2 вида одного URL-адреса (только разница имеет последний слэш до ?), и для этого мне нужно создать единый шаблон (регулярное выражение). Таким же образом шаблон может обрабатывать оба варианта URL.Шаблон не работает для правила перезаписи

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

Я пытаюсь использовать шаблон ниже, который работает отлично подходит для 1-го URL, но не работает на 2-ой URL.

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

Я попробовал еще несколько ниже шаблон, но не получил успеха.

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

С помощью той же схеме, я хочу, чтобы получить ниже выход, который я получаю через 1 URL.

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

и со 2-го URL мне нужно, чтобы получить ниже выхода

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

У меня 6 вид URL-адресов

  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

Таким образом, все вышеуказанные адреса приземлятся на одной странице, но если первые 3 адресов будут поражены, то мне нужно dispenser и Hand-towel как R1 и R2, а если 4-й, 5-й и 6-адрес будет хит, то я необходимо dispenser, hand-towel и hand-towel-roll как R1, R2 и R3.

В то время как шаблон ^products/([^/]+)/([^/]+)/?$ предназначен только для 1 и 2 URL-адресов, так как этот шаблон не сможет идентифицировать параметр R3 для URL-адресов 4,5 и 6.

В то время как шаблон ^products\/([^\/]+)\/([^\/]+)\/(.+)$ не работает для 1-го URL-адреса.

+0

@Fallen герой: Спасибо за ваши усилия. Но все же какая-то часть отсутствует на выходе, я обновил свой вопрос для лучшего уточнения, пожалуйста, смотрите. – user3305540

ответ

3

Ваша проблема $ в конце. Это означает end of line, но у вас есть ?gclid=CPDv, который вы все еще хотите найти.

Смотрите здесь: https://regex101.com/r/SkHXWH/2

Захваченные группы даст вам ключ.

Почему вы не просто делать это:

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

это даст вам разыскиваемым группы выхода/захват

Для вашего URL, как указано в комментариях

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

или с только 2 группы

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

Кажется, что он работает для обоих URL-адресов, но какая часть здесь дает {R: 1} и {R: 2}, так как мне нужно использовать эти r1 и r2 для создания нового URL-адреса. – user3305540

+0

Что мне нужно добавить для этого URL-адреса в шаблоне. Продукты/диспенсер/рука полотенце/ручной полотенце-ролл /? GCLID = CPDv – user3305540