2013-05-31 6 views
0

rewritemap이 URL 일치에 쿼리 매개 변수를 고려하지 않는 것 같습니다. 해결책을 제안하십시오. httpd.conf 파일에서RewriteMap이 쿼리 매개 변수가있는 URL에 작동하지 않습니다.

내 설정 :

RewriteMap redirects dbm=db:/usr/local/apache/conf/redirects.db 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last] 

파일을 리디렉션 URL이

/same_url/ http://mysite.com/ 
/same_url/?q=1 http://mysite.com/q2=1 
/same_url/?q=2 http://mysite.com/q2=2 
/same_url/?q=3 http://mysite.com/q2=3 

을 lile있다 그러나 4 개 URL은 단지 http://mysite.com로 보내지고있다. 그래서 그것은 비 - 쿼리 부분에 대해서만 수행되는 것 같습니다.

도와주세요.

+0

은 'RewriteRule의'에 쿼리 PARAM을 고려하지 않습니다. – Shatiz

+0

RewriteRule과 일치 할 때 쿼리 문자열이 제거됩니다. '% {QUERY_STRING} '을 봐야합니다. – Gerben

답변

3

RewriteMap을 보면지도를 사용할 필요가없는 것으로 보입니다. 당신은지도없이 수행 할 수 있습니다 %1

RewriteCond %{QUERY_STRING} ^q\=([0-9]+)$ 
RewriteRule ^/same_url/(.*)$ http://example.com/q2=%1 [redirect=permanent,last] 

에주의를한다 RewriteCond의 경기에 RewriteRule의의 역 참조에. 당신은 여전히 ​​경로에 무언가로 쿼리 문자열을 "변환"하는 당신이 가진 수있는 재 작성 맵을 사용하려면

규칙은있을 수 :

RewriteCond %{QUERY_STRING} ^q\=([0-9]+)$ 
RewriteRule ^/(.*)$ /$1/q=%1 <-- here the GET param is transformed to something in the path 

RewriteMap redirects dbm=db:/usr/local/apache/conf/redirects.db 
RewriteCond ${redirects:$1} !="" 
RewriteRule ^(.*)$ ${redirects:$1} [redirect=permanent,last] 

당신이지도를 변경해야 뭔가 GET의 PARAMS을 고려하지 : 그것은 아파치처럼 보이는

/same_url/ http://example.com/ 
/same_url/q=1 http://example.com/q2=1 
/same_url/q=2 http://example.com/q2=2 
/same_url/q=3 http://example.com/q2=3 
관련 문제