2013-04-10 1 views
4

왜 내가 항상 규칙을 다시 작성하는 데 막대한 문제가 있는지 이해할 수 없지만 쿼리 문자열이있는 경우 해당 문자열을 추가하고 그렇지 않은 경우 ?을 추가하려고합니다. URL이 브라우저에서 변경되었는지 여부는 신경 쓰지 않고 올바른 대상 페이지를로드해야합니다. 내가 /cia16/steps.php?page=1에 가면쿼리 문자열에 추가 할 다시 쓰기

RewriteRule /cia16(.*)\?(.*) /cia$1?$2&CIA=16 
RewriteRule /cia16(.*) /cia/$1?CIA=16 

는 실제로 /cia/steps.php?CIA=16에 다시됩니다 - 즉, 심지어 재 작성의 목적을 위해 URL의 일부로 간주되지 않는 쿼리 문자열 부분을 받아 들일 것입니다.

재 작성이 기존 쿼리 문자열과 제대로 작동하려면 어떻게해야합니까?

답변

7

RewriteRule 내의 검색어 문자열과 일치 할 수없는 검색어 RewriteCond%{QUERY_STRING} 변수와 일치해야합니다.

RewriteRule /cia16(.*) /cia/$1?CIA=16 [QSA] 

URI입니다 : /cia16/steps.php?page=1/cia/steps.php?CIA=16&page=1에 다시 얻을 것이다 당신은 그냥 쿼리 문자열을 추가하려는 경우, 당신은 단지 QSA 플래그를 사용할 수 있습니다. 어떤 이유로,이 같은 page=1CIA=16하기 전에, 당신이 할 수있는 일을해야하는 경우 :

RewriteRule /cia16(.*) /cia/$1?%{QUERY_STRING}&CIA=16 
+0

'[QSA]'내가 구문이 솔직히 홀수 인 경우에도 필요 ... 정확히 수행 –

+0

이 솔루션은 리디렉션 전에 초기 URL에 대한 쿼리 문자열이 없으면? & CIA = 16을 반환합니다. 그걸 피하기위한 팁이 있습니까? –

관련 문제