当 URL 包含特定单词但不包含其他单词时,nginx URL 重写正则表达式

当 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

这意味着我要重定向不包含单词/products/and 的URL /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;

答案1

类似这样的方法应该可以解决您上面所说的问题,但是您的问题并不那么精确,而且可能不是您想要的。

= 表示完全匹配。删除它,我认为您会得到子字符串匹配。您可以阅读文档了解详细信息。

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

相关内容