Регулярное выражение перезаписи URL nginx, когда URL содержит определенное слово, но не другое
Пожалуйста, рассмотрите следующие URL.
- https://products.example.com/family/child
- https://products.example.com/products/family/child
- https://products.example.com/family/children
- https://products.example.com/products/family/children
Среди четырех я должен перенаправить один следующим образом: https://products.example.com/family/children
Это означает, что я хочу перенаправить URL-адреса, которые не содержат слово /products/
а также /children
, Если URL не содержит слова /products/
но содержат /child
в конце мне нужно заменить /child
с /children
,
ОБНОВЛЕНИЕ 1: у меня есть 2 проблемы, как показано ниже.
- Определите URL, который нужно заменить.
- Измените указанный URL-адрес, как требуется.
Я могу определить URL с этим регулярным выражением, но не могу заменить.
Обновление 2: я думаю, что нашел способ идентифицировать: ^(?!.*\/products(?:\/))(?:(.*)\/|$)?(?:child)$
и заменить: $1/children
Следующая проблема: регулярное выражение работает с опцией /m
только. Может ли это быть изменено, чтобы работать без него как:
rewrite ^(?!.*\/products(?:\/))(?:(.*)\/|$)?(?:child)$ $1/children permanent;
1 ответ
Нечто подобное должно работать для того, что вы сказали выше, однако ваш вопрос не так точен, как мог бы, и это может быть не совсем то, что вы хотите.
= Означает точное совпадение. Удалите его, и я думаю, вы получите совпадение подстроки. Вы можете прочитать документацию для деталей.
location = /family/child {
return 301 http://www.example.com/family/children;
}