以下是我们当前Nginx规则的示例,该规则将某些流量从一个基域重定向到另一个域(DNS迁移的结果):
location ~* /(var1|var2|var3) {
rewrite ^ http://newurl.com$uri? permanent;
}
因此,请使用以下网址上方的网址:oldurl.com/var1/foo
正确地重定向到:newurl.com/var1/foo
使用此方法oldurl.com/foo
目前不会重定向到按照设计和我们想要的新域名。
但是我们现在遇到的问题是,如果在URL语句中的任何位置使用了location语句中找到的任何关键字,那么它将被重定向。我们只想对与url序列的第一个/###/
文件夹中找到的变量进行模式匹配。
换句话说,我们想要oldurl.com/var1/foo
重定向但不是oldurl.com/foo/var1
鉴于我们当前的正则表达式规则,它会在网址中找到var1(即使它位于第2位)并重定向。
换句话说:oldurl.com/foo/var1
重定向到newurl.com/foo/var1
但我们不希望它。
我的正则表达式对于仅与/###/
代码的第一个块进行模式匹配并不是那么漂亮。有人可以用正确的正则表达式/ nginx语句帮助我吗?
答案 0 :(得分:0)
这是一个正则表达式,因此您需要使用^
将其锚定到网址路径的开头,如下所示:
location ~* ^/(var1|var2|var3) {
rewrite ^ http://newurl.com$uri? permanent;
}