2012-03-03 3 views
0

나는 /orders/whatever/?n=4

에서 리디렉션 할 :

/orders/?shopURL=whatever&n=4 

내가 올바른 디렉토리로 리디렉션 관리하지만 전달 된 변수를 잃고입니다.

이 내 현재의 규칙입니다 : 거의 모든 페이지를 리디렉션 할 것처럼

RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L] 

답변

1

쿼리 문자열의 존재를 시행 할 경우, 사용

RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1 [L,QSA] 
+2

을 제외하면'(n = \ d *)'도'ban = 234G'와 일치합니다. 이 경우'(\ bn = \ d * \ b)'를 사용하십시오. – TerryE

+0

\ d는 숫자와 만 일치하기 때문에 마지막에 \ b를 피할 수는 있지만 앞에 추가하는 것은 꼭 필요합니다. 나는 그것을 사용하기 위해 나의 대답을 업데이트 할 것이다. (이전에는 \ b를 사용 해본 적이 없었고 '금지'대'n '상황을 방지하는 방법을 생각할 수 없었기 때문에 그것을 지적 해 주셔서 감사합니다!) –

+0

대부분의 개발자는 Apache regexp 엔진은 ** full ** PCRE 구현입니다. 따라서 메타 문자, 비 탐욕적인 매칭, lookahead/behind assertions, \ n 변수와 같은 모든 항목이 작동합니다. :-) – TerryE

0

귀하의 RewriteRule의는 매우 일반적인 것 같다.

저는 정규 표현식에별로 좋지 않습니다. 그래서 나는 당신이나 다른 누군가에게 남겨 둘 것입니다. 그러나 매개 변수를 잡으려면 다시 쓰기 규칙이 끝날 때까지 무언가가 필요합니다. 그런 다음 새 URL 끝에 추가하십시오.

RewriteRule ^([\w\d]+)/(somethinghere)$ /orders/?shopURL=$1&$2 [L] 
1

QSA 플래그 :

RewriteCond %{QUERY_STRING} (\bn=\d+\b) 
RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1&%1 [L] 

그렇지 않으면, 당신은한다 RewriteCond없이 다음을 사용할 수 있습니다 RewriteRule은 기존 쿼리 문자열 필드를 유지합니다.

관련 문제