我们正在为我们的财产搜索交换机厂商,每一个不同格式的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网址的每一个是谁?
谢谢,基思
做到这一点的方法是使用一个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;
}
我更喜欢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”到“/属性”
第三行是明显