Регулярное выражение перезаписи URL-адреса nginx, когда URL-адрес содержит определенное слово, но не другое

Обратите внимание на следующие URL-адреса.

  1. https://products.example.com/family/child
  2. https://products.example.com/products /family/child
  3. https://products.example.com/family/children
  4. https://products.example.com/products/family/children

Из четырех мне нужно перенаправить один как показано ниже: https://products.example.com/family/children

Это означает, что я хочу перенаправить URL-адреса, которые не содержат слова / products / и / дети . Если URL-адрес не содержит слова / products / , но содержит / child в конце, мне нужно заменить / child на / children .

ОБНОВЛЕНИЕ 1: У меня две проблемы, как показано ниже.

  1. Определите URL-адрес, который нужно заменить.
  2. При необходимости измените указанный URL.

Я могу идентифицировать URL с помощью этого регулярного выражения , но не могу заменить.

Обновление 2 : Я думаю, что нашел способ идентифицировать : ^ (?!. * \ / Products (?: \ /)) (?: (. *) \ / | $)? (?: child) $ и замените: $ 1 / children

Следующая проблема: регулярное выражение работает только с опцией / m . Можно ли изменить это так, чтобы оно работало без него:

rewrite ^(?!.*\/products(?:\/))(?:(.*)\/|$)?(?:child)$ $1/children permanent;
0
задан 29 March 2018 в 08:18
1 ответ

Что-то вроде этого должно работать для того, что вы сказали выше, однако ваш вопрос не это не так точно, как могло бы быть, и это может быть не совсем то, что вам нужно.

= означает точное совпадение. Удалите его, и я думаю, вы получите совпадение подстроки. Подробности вы можете прочитать в документации.

location = /family/child {
  return 301 http://www.example.com/family/children;
}
0
ответ дан 5 December 2019 в 06:21

Теги

Похожие вопросы