Назад | Перейти на главную страницу

nginx URL перезаписывает регулярное выражение, когда 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/ и /children. Если в URL нет слова /products/ но содержать /child в конце мне нужно заменить /child с участием /children.

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

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

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

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

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

rewrite ^(?!.*\/products(?:\/))(?:(.*)\/|$)?(?:child)$ $1/children permanent;

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

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

location = /family/child {
  return 301 http://www.example.com/family/children;
}