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