2011-08-16 6 views
1

RedirectMatch를 사용하여 동일한 도메인의 새 URL로 리디렉션해야하는 이전 사이트 구조의 URL이 길었습니다. 트릭은 오래된 (소스) URL에 지저분한 변수가 포함되어 있다는 것입니다. 그게 문제가 아니지? 나는 그 변수를 처리하기 위해 약간의 작은 Regexp 문을 넣었다. 그게 내가 한 일이고, 변수를 올바르게 일치시킵니다. 단!Regexp/htaccess 재밌기

이 문제는 RedirectMatch 문의 두 번째 부분 인 대상과 함께 발생합니다. RedirectMatch는 이전 URL이 새 URL에 올바르게 추가된다는 점을 제외하고 이전 URL을 새 URL로 올바르게 해석합니다. 리디렉션을 유지하려고하지만 도착 URL에 변수가 포함되지 않도록하십시오. 여기 내 코드는 다음과 같습니다

RedirectMatch 301 ^/Shop/Category1/Category2/(.*)$ http://www.website.com/garage.html 

실제 리디렉션 URL :

http://www.website.com/garage.html?launch_pg=itemZoomView&launch_sel=1009152&launch_pg_sp=true&title=Pig+Waste+Can 

사람이 내게는 내가 잘못 여기서 뭐하는 거지에 포인트? 나는 그 낡은 변수들을 없애고 신선한 것을 시작하기를 원할뿐입니다.

답변

1

"변수"에 의해 당신은 쿼리 문자열 (도착 URL의 예를의 launch_pg=itemZoomView&launch_sel=1009152&launch_pg_sp=true&title=Pig+Waste+Can 부분)을 의미하는 경우,이 리디렉션 규칙을 사용

RedirectMatch 301 ^/Shop/Category1/Category2/(.*)$ http://www.website.com/garage.html? 

유일한 차이점 - 새로운 URL의 끝에 ?을 . 이렇게하면 새 URL에 비어있는 쿼리 문자열이 있음을 Apache에 알리는대로 이전 쿼리 문자열이 복사되지 않습니다.

# Activate Rewrite Engine 
Options +FollowSymLinks 
RewriteEngine On 

# the rewrite rule 
RewriteRule ^Shop/Category1/Category2/(.*)$ http://www.website.com/garage.html? [R=301,L] 

이 확실히 빈 쿼리 문자열로 리디렉션됩니다 :


당신이 mod_rewrite를를 사용할 수있는 경우, 여기에 규칙입니다.

+0

예, 실제로이 게시물 이후의 진행중인 연구에서이를 발견하고 소용돌이 치게했습니다. 결과적으로 추가 "?" 변수의 시작 부분에 다음과 같이 추가됩니다. http://www.website.com/garage.html??launch_pg=itemZoomView&launch_sel=1009152&launch_pg_sp=true&title=Pig+Waste+Can –

+0

@Tela - 나도 몰라. 당신은 무엇을 했습니까? 그러나 그렇게해서는 안됩니다. 제가 제공 한 코드는 100 % 작동합니다 - 아파치 2.2.17에서 아무런 문제없이 비슷한 코드를 사용하는 몇몇 웹 사이트를 운영합니다. – LazyOne

+0

@Tela 동일한 작업을 수행하는 mod_rewrite 전원 리디렉션 규칙을 추가했습니다. – LazyOne