Nginx从旧网址重定向到新网址

时间:2012-09-09 14:35:11

标签: redirect nginx

我们正在为我们的房产搜索切换供应商,每个网站的格式都略有不同。我们已经将40,000多个网址编入索引,并希望将用户301重定向到新网址。

URL中唯一的区别是从下划线切换到连字符,从/ idx /切换到/ property /。

以下是旧网址:http://www.mysite.com/idx/mls-5028725-10425_virginia_pine_lane_alpharetta_ga_30022

以下是新网址:http://www.mysite.com/property/mls-5028725-10425-virginia-pine-lane-alpharetta-ga-30022

如何在不知道40,000多个网址中的每一个网址的情况下重定向所有这些网址的任何想法?

谢谢, 基思

2 个答案:

答案 0 :(得分:0)

一种方法是使用perl子例程将下划线更改为连字符。您需要使用perl编译nginx,除非它已经不包含在内。这不是一个完全可行的解决方案,但它可能会让您朝着正确的方向前进:

在nginx.conf中,在http部分中添加:

perl_modules  perl/lib;
perl_set $fix_uri 'sub {
        use File::Basename;
        my $req = shift;
        my $uri = $req->uri;
        $uri = basename($uri);
        # Do some magic here, probably more elegant than this
        $uri =~ s/idx/property/g;
        $uri =~ s/_/-/g;
        return $uri;
}';

然后在该位置,您可以调用子程序:

   location ~ "/idx/(.*" {
            set $redirect_path $fix_uri;
            rewrite . $redirect_path;
    }

答案 1 :(得分:0)

我自己更喜欢ngx_lua模块。

location /idx/ {
    rewrite_by_lua '
        local tempURI, n = ngx.re.gsub(ngx.var.uri, "_", "-")
        local newURI, m = ngx.re.sub(tempURI, "/idx", "/property", "i")
        return ngx.redirect(newURI, ngx.HTTP_MOVED_PERMANENTLY)
    ';
}

第一行(gsub)将所有“_”更改为“ - ”

第二行(sub)首先将“/ idx”更改为“/ property”

第三行很明显