0

这是我们当前 Nginx 规则的示例,它将一些流量从一个基本域重定向到另一个(DNS 迁移的结果):

location ~* /(var1|var2|var3) {
    rewrite ^ http://newurl.com$uri? permanent;
}

因此,使用以下网址上方的网址:oldurl.com/var1/foo
正确重定向到:newurl.com/var1/foo

目前使用这种方法oldurl.com/foo不会重定向到设计和我们想要的新域。

然而,我们现在遇到的问题是,如果在位置语句中找到的任何关键字在 URL 中的任何位置使用,那么它就会被重定向。我们只想对/###/在 url 序列的第一个文件夹中找到的变量进行模式匹配。

换句话说,我们想要oldurl.com/var1/foo
重定向但不是oldurl.com/foo/var1

鉴于我们当前的正则表达式规则,它会在 url 中找到 var1(即使它位于第二个位置)并重定向。
换句话说:oldurl.com/foo/var1
重定向到newurl.com/foo/var1
但我们不希望它。

我的正则表达式对于仅针对第一块/###/代码的模式匹配并不那么漂亮。有人可以帮助我正确的 regex/nginx 语句吗?

4

1 回答 1

0

这是一个正则表达式,因此您需要将其锚定到 url 路径的开头,^如下所示:

location ~* ^/(var1|var2|var3) {
    rewrite ^ http://newurl.com$uri? permanent;
}
于 2013-05-15T12:38:11.990 回答