我们正在为我们的房产搜索切换供应商,每个网站的格式都略有不同。我们已经将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多个网址中的每一个网址的情况下重定向所有这些网址的任何想法?
谢谢, 基思
答案 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”
第三行很明显