2013-06-06 2 views
1

Google 블로그를 Wordpress로 마이그레이션하고 있으며 기존의 모든 URL에 대해 301을 설정해야합니다. 다음과 같이원본 페이지의 슬러그를 유지하면서 htaccess에서 301 리디렉션을 수행하는 방법

루트에서 기존의 구조는 다음과 같습니다

/blog/bid/148509/The-Role-of-a-Father 

것은 우리가 그것을 할 수 있어야합니다 우리의 새로운 워드 프레스 블로그 (루트)에서

/the-role-of-a-father로 이동합니다.

나는 데 문제의 일부

는 다음과 같습니다

  1. 내가 같은 슬러그 원래 결말을 유지하는 RewriteRule을 수행하는 방법을 모르겠어요.
  2. /bid/ 이후의 숫자는 일관성이 없으므로 그 숫자를 무시하지만 이후에 슬러그를 무시하지 않아도됩니다.
  3. 소문자로 변환하려면 최종 URL이 필요합니다.

나는 이것이 꽤 많이 요구된다는 것을 알고있다. 어떤 도움이나 자원이라도 도움이 될 것입니다!

+0

는 사실은 간단하게 다음과 같이이 작업을 수행 할 수 있었다? [R = 301, L, NC]. 시스템을 사용하면 대답을 게시 할 것입니다. – Ian

답변

3

을, 가변 정보를 어떻게 알아낼 수 있었다 : 당신의 가상 호스트에서

, 당신의 .htaccess에서 RewriteMap lc int:tolower

을 추가, 추가 이것을하기 위해.

.htacces, rewrites 및/또는 regex에 익숙하지 않은 다른 사람들을 돕기 위해 내가 배운 것뿐만 아니라 해결책도 게시했습니다.

내 문제 해결 최종 제품이 같은 전체 htaccess로 보이는

RewriteRule ^blog/bid/[0-9].*/(.*)$ /$2? [R=301,L,NC] 

:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase/

RewriteRule ^blog/bid/[0-9].*/(.*)$ /$1? [R=301,L,NC] 


</IfModule> 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

</IfModule> 

# END WordPress 

기본적으로 제가 한 것은 패턴에 대한 몇 가지 정규식 마법을 사용 하였다. 내가 말할 수있는 정규식을 사용하여 /bid/ 항상 변경 후 번호, 이후이는 [0-9].*

[0-9]가 0-9 번호가 모든 문자와 일치하여 수행됩니다 "아무리 그 안에 어떤 숫자이 패턴과 일치하지 않습니다." .은 단일 문자와 일치하며 *은 해당 문자가 0 개 이상 인 경우 일치합니다.

다음 부분은 마술이 일어나는 부분입니다. 그 이후 슬러그 (퍼머 링크)는 .*으로 일치하고 ()에 랩핑되면 변수로 저장됩니다.

그런 다음 내 재 작성의 대체 부분에서 해당 변수를 사용할 수 있습니다. $1은 패턴 섹션에 (.*)을 나타내는 변수입니다. ()에 포장 된 섹션이 더있는 경우 $1, $2 등을 사용하여 초기 패턴에서 저장된 변수를 사용할 수 있습니다.

일단 완료되면 내 깃발을 설정합니다. R=301은 콘텐츠가 영구적으로 이동했다는 검색 엔진에 알리는 헤더 리디렉션을 설정합니다. L은 해당 패턴이 일치 할 때 적용되는 마지막 규칙입니다 (즉, 재 작성 일치를 계속 시도하지 않음). NC은 대소 문자가 중요하지 않음을 나타냅니다.

참고

는 규칙의 간격에 특별한주의를 기울이십시오. 충분하지 않거나 너무 많으면 전체 웹 사이트가 다운 될 수 있습니다. 깃발 섹션에서 쉼표 사이에 공백이 없어야한다는 사실을 아는 것이 특히 중요합니다. 그게 나 한테 물어./[0-9]/(. *) $/$ 2 RewriteRule의^블로그/입찰 (*.) :

0

블로그를 이전 할 때 301 리디렉션을 사용해야합니다.

301 리디렉션은 정의에 따라 URL 표시 줄의 경로를 변경합니다.

메모리에서 소문자로 만들 필요가있는 경우이 모든 단계를 수행해야합니다. 구문, 정규식으로 찾는 많은 연구를 통해

RewriteCond %{REQUEST_URI} [A-Z] 
RewriteRule (.*) ${lc:$1} [R=301,L] 

RewriteRule /blog/bid/([0-9]+)/(.*) /$2 [R=301,l] 
관련 문제