2

物件検索のベンダーを切り替えており、それぞれが URL のフォーマットを少しずつ変えています。すでに 40,000 以上の URL がインデックスに登録されており、ユーザーが新しい URL に 301 リダイレクトされるようにしたいと考えています。

URL の唯一の違いは、アンダースコアからハイフンへの切り替えと、/idx/ から /property/ への切り替えです。

古い URL は次のとおりです: http://www.mysite.com/idx/mls-5028725-10425_virginia_pine_lane_alpharetta_ga_30022

新しい URL は次のとおりです: http://www.mysite.com/property/mls-5028725-10425-virginia-pine-lane-alpharetta-ga-30022

40,000以上のURLのすべてが何であるかを知らずに、これらすべてのURLをリダイレクトする方法はありますか?

ありがとう、キース

4

2 に答える 2

0

これを行う 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;
    }
于 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) はすべての "_" を "-" に変更します

2 行目 (サブ) は、最初の "/idx" を "/property" に変更します。

3行目がわかりやすい

于 2012-09-12T18:16:32.443 に答える