2014-07-23 2 views
0

mod_rewrite를 사용하여 URL의 대괄호 안에있는 문자열을 캡처하고 리디렉션하고 싶습니다.mod_rewrite : URL에서 일치하는 문자열을 선택하겠습니까?

내 URL :

something?var_a=A&var_b=(B)&var_c=C

정규식 내 .httaccess 파일 :

RewriteEngine on 
RewriteRule ^/?.+var_b=\((.*)\)$ somedir/$1 [R] 
가 에게 난 그냥 둥근 괄호 사이에 무엇을 캡처하고 싶은

, 그래서 내 리디렉션이 보일 것이다 like : somedir/B

내 정규식을 http://htaccess.madewithlove.be/에서 테스트하지만 일치하는 항목이 없습니다.

훨씬 간단한 정규식을 사용해도 여기에 무엇이 누락되어 있는지 알 수 없습니다. .+var_b(.*)$ 나는 성냥을 얻지 못한다. 내 정규 표현식이 처음에 패턴을 찾는 경우에만 일치가 발생하므로 정규식 something(.*)$이 작동합니다.

무엇이 여기에 있습니까?

답변

2
RewriteEngine On 
RewriteCond %{QUERY_STRING} (^|&)var_b=\((.*?)\)(&|$) [NC] 
RewriteRule ^.*$ somedir/%2? [R] 

이유는 RewriteRule의 쿼리의 ?x=y 일부를받지 않는다는 것입니다. %2 변수는 마지막 RewriteCond의 패턴을 나타내며 $2RewriteRule의 패턴을 나타냅니다. 결국 ?은 쿼리 부분 ?x=y이 결과의 끝에 자동으로 추가되지 않도록합니다.

패턴의 (^|&)(&|$)var_b=(B)이 전체 매개 변수이며 일부는 아닌 것을 보증합니다. 이러한 패턴이 없으면 패턴은 ?xyzvar_b=(B) 또는 ?var_b=(B)xyz과도 일치합니다. 이 경우 ?var_b=(B) 또는 ?a=b&var_b=(B)&x=z 등과 일치합니다.

+0

감사합니다. '(^ | &)'와'($ | &)'는 무엇인가? – user1981275

+0

답변에 추가했습니다. –

관련 문제