2012-09-09 8 views
2

우리는 속성 검색을 위해 공급 업체를 바꾸고 있으며 각각 URL을 약간 다르게 지정합니다. 이미 40,000 개 이상의 URL이 색인 생성되었으며 사용자가 새 URL로 리디렉션되기를 원합니다.Nginx가 이전 URL에서 새 URL로 리디렉션

URL의 유일한 차이점은 밑줄에서 하이픈,/idx/to/property /로 전환된다는 것입니다. http://www.mysite.com/idx/mls-5028725-10425_virginia_pine_lane_alpharetta_ga_30022

여기에 새로운 URL은 다음과 같습니다 : 여기

이전 URL입니다 http://www.mysite.com/property/mls-5028725-10425-virginia-pine-lane-alpharetta-ga-30022

모든 아이디어를 어떻게 40,000 URL이 모든 일이 무엇인지 모른 채 이러한 모든 URL을 리디렉션하는 방법?

감사합니다, 하이픈에 밑줄을 변경 펄 서브 루틴을 사용 할 수 키스

답변

0

한 가지 방법. 이미 포함되어 있지 않다면 펄과 함께 nginx를 컴파일해야합니다. 이것은 완벽하게 작동 해결책이 아니다, 그러나 당신이 올바른 방향으로 가고 얻을 수 있습니다 : 당신이 전화를 수있는 위치에 다음

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

: nginx.conf에서

는 HTTP 섹션 내에이 추가 서브 루틴 :

location ~ "/idx/(.*" { 
      set $redirect_path $fix_uri; 
      rewrite . $redirect_path; 
    } 
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"를 "/ 속성"

셋째 줄 명백한 변경

관련 문제