2016-06-29 3 views
1

나는 쿼리 문자열 리디렉션을 설정하고 있습니다 :아파치 쿼리 문자열 재 작성 규칙

expo.com/en/general/campaigns/on-second-thought.html?slide=ost-2016-tank 일어나고 리디렉션 expo.com/en/general/campaigns/on-second-thought/ost-2016-tank.html

RewriteCond %{HTTP_HOST} ^(.*)expo\.com 
RewriteCond %{QUERY_STRING} slide=ost-2016-tank 
RewriteRule  ^/en/general/campaigns/on-second-thought.html?$  http://www.expo.com/en/general/campaigns/on-second-thought/ost-2016-tank.html [R=301,L,NC] 

에 있지만 추기 슬라이드 = OST - 2016 - 탱크 같은

http://www.expo.com/en/general/campaigns/on-second-thought/ost-2016-tank.html?slide=ost-2016-tank 

아래

slide=ost-2016-tank 매개 변수는 리디렉션 된 페이지에 추가됩니다.

답변

1

규칙이 새 쿼리 문자열을 정의하지 않기 때문에 Apache의 기본 동작은 이전 쿼리 문자열을 새 URL로 복사하는 것입니다.

RewriteRule ^/en/general/campaigns/on-second-thought\.html?$ http://www.expo.com/en/general/campaigns/on-second-thought/ost-2016-tank.html [R=301,L,NC,QSD] 
: 아파치> = 2.4, 당신은 또한 플래그 QSD (쿼리 문자열 취소를) 사용할 수

RewriteRule ^/en/general/campaigns/on-second-thought\.html?$ http://www.expo.com/en/general/campaigns/on-second-thought/ost-2016-tank.html? [R=301,L,NC] 

또는 : 그것을 제거하려면, 당신은 다시 주소로 ?을 추가 /로 리디렉션 리디렉션 할 때

+0

Thqs Julp, 현재 작동 중입니다. –

1

은 단순히 빈 쿼리 문자열을 추가하지 :

RewriteCond %{HTTP_HOST} ^(.*)expo\.com 
RewriteCond %{QUERY_STRING} ^slide=(ost-2016-tank)$ 
RewriteRule ^(/?en/general/campaigns/on-second-thought)\.(html)$ $1/%1.$2? [R=301,L,NC] 

리디렉션 할 때 다시 http://expo.com을 언급 할 필요가 있습니다. R 플래그로 인해 자동으로 동일한 호스트 이름으로 리디렉션됩니다. 동일한 문자열을 반복해서 반복 할 필요가 없습니다. 일치 그룹을 사용하고 나중에 참조로 참조하십시오.

패턴에 .html?$이 있었는데 실제로는 .html.htm이 일치한다는 의미입니다. RewriteRule 컨텍스트에서 쿼리 문자열을받지 못합니다.