2

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

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 多个 URL 中的每一个是什么的情况下重定向所有这些 URL?

谢谢,基思

4

2 回答 2

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;
    }
于 2012-09-10T07:49:04.810 回答
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) 将所有“_”更改为“-”

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

第三行很明显

于 2012-09-12T18:16:32.443 回答