나는 /orders/whatever/?n=4
에서 리디렉션 할 :
/orders/?shopURL=whatever&n=4
내가 올바른 디렉토리로 리디렉션 관리하지만 전달 된 변수를 잃고입니다.
이 내 현재의 규칙입니다 : 거의 모든 페이지를 리디렉션 할 것처럼
RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L]
나는 /orders/whatever/?n=4
에서 리디렉션 할 :
/orders/?shopURL=whatever&n=4
내가 올바른 디렉토리로 리디렉션 관리하지만 전달 된 변수를 잃고입니다.
이 내 현재의 규칙입니다 : 거의 모든 페이지를 리디렉션 할 것처럼
RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L]
쿼리 문자열의 존재를 시행 할 경우, 사용
RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1 [L,QSA]
귀하의 RewriteRule의는 매우 일반적인 것 같다.
저는 정규 표현식에별로 좋지 않습니다. 그래서 나는 당신이나 다른 누군가에게 남겨 둘 것입니다. 그러나 매개 변수를 잡으려면 다시 쓰기 규칙이 끝날 때까지 무언가가 필요합니다. 그런 다음 새 URL 끝에 추가하십시오.
RewriteRule ^([\w\d]+)/(somethinghere)$ /orders/?shopURL=$1&$2 [L]
QSA
플래그 :
RewriteCond %{QUERY_STRING} (\bn=\d+\b)
RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1&%1 [L]
그렇지 않으면, 당신은한다 RewriteCond없이 다음을 사용할 수 있습니다 RewriteRule
은 기존 쿼리 문자열 필드를 유지합니다.
을 제외하면'(n = \ d *)'도'ban = 234G'와 일치합니다. 이 경우'(\ bn = \ d * \ b)'를 사용하십시오. – TerryE
\ d는 숫자와 만 일치하기 때문에 마지막에 \ b를 피할 수는 있지만 앞에 추가하는 것은 꼭 필요합니다. 나는 그것을 사용하기 위해 나의 대답을 업데이트 할 것이다. (이전에는 \ b를 사용 해본 적이 없었고 '금지'대'n '상황을 방지하는 방법을 생각할 수 없었기 때문에 그것을 지적 해 주셔서 감사합니다!) –
대부분의 개발자는 Apache regexp 엔진은 ** full ** PCRE 구현입니다. 따라서 메타 문자, 비 탐욕적인 매칭, lookahead/behind assertions, \ n 변수와 같은 모든 항목이 작동합니다. :-) – TerryE