在NGinx配置中的正则表达式规则仅与第一个URL参数进行比较

时间:2013-05-15 07:37:02

标签: regex nginx

以下是我们当前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语句帮助我吗?

1 个答案:

答案 0 :(得分:0)

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

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