2011-09-21 3 views
0

"?"를 사용하여 특정 페이지를 301 리디렉션하는 방법 그들의 URL에?"?"를 사용하여 특정 페이지를 301 리디렉션 (.htaccess 포함)하는 방법 그들의 URL에?

예 : http://domain.com/cat/?id=1 ---> http://domain.com/catalog/180/

나는 그런 URL을 잔뜩 있습니다. 이전 & 새 URL의 ID가 일치하지 않습니다 !!!

htaccess로는 :

<IfModule mod_alias.c> 
Redirect 301 /cat/?id=1 http://domain.com/catalog/180/ 
</IfModule> 

인해 문제가 발생합니다 "?" urls.

답변

1

당신이 사용하는이 mod_rewrite를 당신은 불행하게도Redirect 지시문을 사용하여 쿼리 문자열을 일치하지 않을 수 있습니다 으로 (가 설치되고 활성화되어야합니다) - 당신이 행복하지 않으면 (mod_rewrite는이 나만의 선택에 알려져있다 PHP/ASP/etc 코드에서 그렇게하십시오).

# enable rewrite engine 
Options +FollowSymLinks 
RewriteEngine On 

# the actual rule 
RewriteCond %{QUERY_STRING} ^id=1$ 
RewriteRule ^cat/$ http://domain.com/catalog/180/? [R=301,L] 

새 URL 끝의 ?은 현재 검색어 문자열을 삭제하는 데 사용됩니다. URL이 없으면 새 URL은 http://domain.com/catalog/180/?id=1처럼 보이지만 원하지 않습니다.

위의 규칙은 웹 사이트 루트 폴더의 .htaccess에 배치되도록 설계되었습니다 (다른 곳으로 배치하면 약간의 미세 조정이 필요할 수 있음). /cat/?id=1 만 일치합니다.


당신이 약간 다른 쿼리 문자열에 해당 URL을 일치 시키려면

이 (같은 추가 매개 변수가 존재 - 예를 들어, 일부 추적/추천 정보 : /cat/?id=1&source=sidebanner)이 규칙 사용

RewriteCond %{QUERY_STRING} (^|&)id=1(&|$) 
RewriteRule ^cat/$ http://domain.com/catalog/180/? [R=301,L] 

이러한를 추가 쿼리 문자열 매개 변수 source=sidebanner은 리디렉션 중 폐기됩니다 (위의 원래 설명을 참조하십시오. ?).

+0

이러한 규칙 집합간에 [OR]을 사용해야합니까? – Ken

+0

'[OR]'?? RewriteCond에만 적용 할 수 있고 규칙은 적용 할 수 없습니다. 규칙은 독립형이며 차례대로 처리됩니다. 가장 좋은 방법은 질문을 업데이트하고 (구분 기호를 사용하고 마음에있는 것을 추가하십시오. 규칙, 사용 방법) 주석이 올바른 형식을 허용하지 않기 때문에 확인 여부를 확인합니다. – LazyOne

관련 문제