Nginx的旧重定向到新的URL(Nginx redirect from old to new UR

2019-09-22 06:52发布

我们正在为我们的财产搜索交换机厂商,每一个不同格式的URL一点点。 我们已经有40000个网址的索引,并希望用户301重定向到新的URL。

在网址的唯一区别是从下划线开关以连字符和从/ IDX /到/属性/。

这里是旧的URL: 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

任何想法如何将所有这些URL重定向不知道什么是40000网址的每一个是谁?

谢谢,基思

Answer 1:

做到这一点的方法是使用一个Perl子程序改变下划线连字符。 你需要除非是不是已经包括它来编译nginx的用Perl。 这不是一个完全的解决方案的工作,但它可能让你在正确的方向前进:

在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;
    }


Answer 2:

我更喜欢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”到“/属性”

第三行是明显



文章来源: Nginx redirect from old to new URL