2012-03-18 3 views
0

Apache Mod-Rewrite moduled와 해당 .htaccess 파일을 사용하여 이전 도메인을 새 도메인으로 마이그레이션하는 중입니다. 우리가 지금 그와 같은 www.newurl www.oldurl.com이었고, 같은 도메인 이름을 제외한.htaccess로 이전 domian을 새 도메인으로 리디렉션

  1. URL의
  2. 데이터베이스

을 포함하는 새 도메인의 거의 동일한 구조를 가지고있다. COM이 내가 한 경우, 우리는 H를 제외하고 잘 작동 할

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

위 설정이 보인다 오래된 도메인 내 .htaccess 파일에있는 것입니다 ave 몇 가지 URL이 제거되었거나 구조가 변경 되었기 때문에 위의 규칙이 적용되지 않습니다 .i는 위에서 설명한 내용 외에 내 .htaccess 파일에 다음과 같이 추가하는 것에 대해 알고 있습니다.

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
Redirect 301 /my-page http://www.newurl.com/your-page 

나는 이러한 URL을 총 20 개 이상 갖고 있으며, 20 개 이상의 URL을 모두 새로운 URL에 매핑해야하며 파일에 넣어야하는 순서에주의해야합니다.

나는 아파치가 어떻게 작동하는지 궁금해한다. 어떤 매칭을 위해 각 매핑 된 URL을 볼 것인가? 아니면 다른 방식으로 작동합니까?

답변

1

Redirect 지시어는 RewriteCond 조건에 구속되지 않고 항상 리디렉션 /도, mod_rewrite는이 mod_alias가보다 우선이 http://www.newurl.com/your-page에 내 페이지 따라서 RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 규칙이 에 적용되기 전에Redirect 지시어가 보입니다. 그러나, htaccess로 파일의 문서 루트 안에 앉아 있으면 모두 oldurl.comnewurl.com 도메인은 Redirect 지시어는 브라우저가 이렇게 http://www.newurl.com/your-page

에 (다시) 리디렉션, http://www.newurl.com/my-page로 리디렉션됩니다 후 적용됩니다

mod_rewrite가 먼저 적용되기 때문에 이러한 순서가 어떤 순서로든 상관 없습니다. 새 사이트에서 새 URL로 리디렉션해야하는 20 개의 URL이있는 경우 각각 Redirect에서 열거 할 수 있습니다. 당신이 오히려 브라우저는 두 번 리디렉션이없는 것 그렇지 않으면, 당신은 mod_rewrite를 엔진을 사용하여 열거 할 수 있습니다 : 는 여기에 문제가을한다 주문

RewriteEngine On 

# redirect the changed URLs individually 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page$ http://www.newurl.com/your-page [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page2$ http://www.newurl.com/your-page2 [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page3$ http://www.newurl.com/your-page3 [R=301,L] 

# Finally, redirect everything else as-is 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

참고. HTTP_HOST에 대한 2 조건을 반복해야하는 것은보기 싫지만, SKIP을 사용하여이 문제를 해결할 수는 있지만, 단지 반복하는 것이 더 나을 것입니다. 그러나 서버 설정이나 가상 호스트 설정에 접근 할 수 있다면, RewriteMap Directive을 보시면 새로운 url에 대한 이전 URL의 매핑을 생성 할 수 있으며 변경된 모든 URL 재 작성을 하나 하나이 같은 서버/가상 호스트 설정 내부

, 뭔가 :

RewriteMap newurls txt:/path/to/file/map.txt 

/경로 /로/파일 /지도.같을 것이다

my-page your-page 
my-page2 your-page2 
my-page3 your-page3 
etc... 

그리고 당신의 결합 규칙 : TXT은 같은 모양 귀중한 입력에 대한

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^(.*)$ http://www.newurl.com/${newurls:$1} [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
+0

감사합니다,하지만 불행히도 난 서버 config' 또는'가상 호스트 설정'에 액세스 할 수 없습니다 '파일 (공유 호스팅), 그래서 당신이 제안한대로 URL을 열거해야 정착 믿습니다. –

관련 문제