Nginx位置块与预期不匹配?

时间:2014-09-12 15:06:13

标签: regex url redirect nginx

我们最近创建了一个新网站,打破了旧网站上很多丑陋的网址。现在那些丑陋的URL得到了404响应。我们希望修复其中的一些链接,因为它们已经破坏了我们合作伙伴的网站,这些网站曾经链接到它们。

在我的nginx配置中,我有:

location = /index.cfm?pagepath=Grain_Marketing&id=15404 {
    return 301 $scheme://www.[redacted].com/grain-marketing/;
}

location /index.cfm {
    return 301 $scheme://www.[redacted].com/;
}

第一个位置块似乎根本不起作用。第二个确实有效。我们希望第二个作为“全部捕获”,如果它完全匹配则应该使用第一个。

我试过了:

  • location~ *
  • 位置
  • location =

......但似乎无法让它发挥作用。

编辑: 我现在已经尝试了这个,它仍然无效。

location /index.cfm {
    rewrite index\.cfm\?/pagepath=Grain_Marketing $scheme://www.[redacted].com/grain-marketing/ permanent;
    return 301 $scheme://www.[redacted].com/;
}

1 个答案:

答案 0 :(得分:0)

没关系,我明白了。这是因为位置似乎没有看到参数。这是解决方案:

location /index.cfm {

    if ($args ~* pagepath=Grain_Marketing) {
        return 301 $scheme://www.[redacted].com/grain-marketing/;
    }

    return 301 $scheme://www.[redacted].com/;

}