2011-01-27 6 views
0

Google에서 발생하는 일부 크롤러 오류를 해결하기 위해 .htaccess를 사용하여 301 리디렉션을 만들려고합니다. Google은 일부 URL의 이전 버전을 사용하고 있습니다. 이로 인해 스파이더가 기존 경로에 액세스하려고 시도 할 때 오류가 발생합니다. 이러한 기존 URL에는 공백이 포함되어 있으며 그 중 많은 수가 URL 문자열 내의 다른 위치에 나타납니다. 예를 들어, URL은 다음과 같이 보았다 수 있습니다.htaccess 301 RedirecMatch 또는 RewriteRule을 사용하여 리디렉션

http://www.example.com/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil 

이 URL은 궁극적으로 동일한 내용을 표시 특히 때문에, 불필요하게 긴. URL의 끝에 만 6 순열가 있지만

http://www.example.com/773-halogen-aircon-oil 

는,이 중 1,000 이상 그대로있다, 그래서 내가 쉽게에 RedirectMatch에 나 RewriteRule의 하나를 사용할 수 있다고 생각 : 그들은 지금 이런 식으로 단축되었다 6 개의 순열 중 하나가 존재하는지 여부와 일치하고 적절한 새 URL로 리디렉션합니다. 뿐만 아니라

RedirectMatch .*/773[\s]?(%20)?CAR[\s]?(%20)?773-halogen-aircon-oil$ http://www.example.com/773-halogen-aircon-oil 

: :이 작동하지 않습니다

RewriteEngine On 
RewriteBase/
RewriteRule .*/773[\s]?(%20)?CAR[\s]?(%20)?773-halogen-aircon-oil$ http://www.example.com/773-halogen-aircon-oil [R=301,L] 

나는 다음을 시도했다. 정규식의 시작 부분을 ^. * /? 773과 다른 많은 것들로 변경하면서 정규식 문자 클래스 대신 \를 사용하여 공백을 이스케이프하는 것을 포함하여 많은 다른 옵션을 시도했지만 아무 것도 작동하지 않습니다.

정규식 테스트 기능을 http://www.regular-expressions.info/javascriptexample.html에 사용하고 정규식이 유효하고 예상되는 URL과 일치하는 것을 생성하지만 .htaccess가 예상대로 리디렉션되지 않는다고보고합니다. 다음과 같이 나는 일반 리디렉션을 사용할 수 있습니다

:

Redirect 301 "/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil" http://www.example.com/773-halogen-aircon-oil 

이 작동하지만, 일치하기 때문에이 문제가 단지 자동차 키트 - 할로겐 - 에어컨 - 오일이 존재하고, 아마 (200)이있는 경우 그 URI 세그먼트의 순열은 가능한 모든 순열에 수작업으로 들어가게한다.

제안 사항? 나는 가능한 일을하려고 노력하고 있습니까?

+0

RedirectRule^/. * - 할로겐 - 에어콘 오일/([0-9] +). * $ http://www.example.com/ 할로겐 - 에어콘 오일 [R = 301, L]'일반 형식입니까? –

+0

문제는 첫 번째 세그먼트에 약 200 개의 순열이 있었고 그 중 대부분은 두 번째 세그먼트와 아무 관련이 없을 수도 있다는 것입니다. 따라서 첫 번째 세그먼트에 대한 일치는 작동하지 않습니다. 이는 모든 의도와 목적을 위해 사용될 수 있기 때문입니다. –

+0

예를 들어 예전 URL은 "example.com/xxx-yyy-zzz/773 CAR 773-halogen-aircon-oil"또는 "example.com/aaa-bbb-ccc/773 CAR 773-halogen -aircon-oil "이되고 이제는 둘 다"example.com/773-halogen-aircon-oil "이됩니다 –

답변

0

당신이 시도하는 규칙은 약간 복잡해 보이고 더 많은 예제를 가지고있는 것이 좋습니다.

RewriteEngine on 
RewriteRule ^.*/773%20CAR%20(.*)$ http://www.example.com/$1 [R=301,L] 

이 작업을 수행해야합니다.

+0

이것은 제대로 작동해야하지만 작동하지는 않습니다. 이제 사이트의 모든 URL은 http://www.example.com/segment_X의 형식을 취하는 반면 http://www.example.com/segment_Y/segment_Z 형식을 사용했습니다. Segment_Y에는 약 200 정도의 순열이 있고 segment_Z에는 6 순열 만 있습니다.Segment_Z는 항상 항상 다음과 같습니다 : –

+0

"773 CAR 773-halogen-aircon-oil"또는 "G2 KPD g2-gen-note-list" 새로운 시스템에서 segment_X는 항상 segment_Z의 6 가지 순열 중 하나이지만 처음 두 요소와 공백 ("773 CAR"또는 "G2 KPD"등)을 잃어 버릴 필요가 있습니다. 이해가 되니? –

+0

항상 "문자 + 숫자 3 문자"의 문자 시퀀스가 ​​있습니까? 원하는 URI 및 예제의 샘플을 제공 할 수 있습니까? – karlcow