2012-01-16 4 views
0

여기 내 .htaccess 파일에있는 내용입니다.preg_match에서이 패턴이 일치하는 동안이 패턴이 RewriteCond의 QUERY_STRING과 (과) 일치하지 않는 이유는 무엇입니까?

RewriteEngine on 

RewriteCond %{QUERY_STRING} ^(run=[a-z0-9A-z]{13})$ 
RewriteRule %{QUERY_STRING} \? [L] 

내가 run=4f13665700694와 유사한 모든 QUERY_STRING에 대한 QUERY_STRING를 재 작성하고 아무것도하지 않고있다 뭐하는 거지 모든. URL 예 : http://thinkingmonkey.me/runs/?run=4f13665700694. 따라서 RewriteCond가 일치해야합니다. 그러나 위의 방법은 효과가 없습니다.

하지만 패턴이 정확하다고 보았습니다. 이후 모두 preg_match & RewriteRulePCRE - Perl Compatible Regular Expressions을 사용하십시오.

preg_match을 사용해 보았습니다. 즉 성공적인 일치

1 

:

$subject = "run=4f13665700694"; 
$pattern = "/^(run=[a-z0-9A-z]{13})$/"; 

echo preg_match($pattern, $subject); 

하고

위가 출력 제외.

이유를 모르겠습니다. 내가 여기서 무엇을 놓치고 있니?

+0

"do nothing"이라고하면 "http : //thinkingmonkey.me/runs/?"로 다시 작성 하시겠습니까? – TerryE

+0

@ 테리 예. 그러나 나는 여기서 문제를 해결했다. '% {QUERY_STRING}'은'RewriteRule'에서 일치 & 대체 될 패턴으로 사용될 수 없습니다. – ThinkingMonkey

답변

2

두 번째 줄과 관련이 있다고 생각합니다. 변경하려면 다음으로 변경하십시오.

RewriteRule ^(.*) $1? 
+1

+1 RewriteRule 패턴에서 변수를 사용할 수 없습니다. 그리고이 정규 표현식을 작성하는 더 간단한 방법은^(. *)입니다. 질의 문자열은 이미 주제에서 제거 되었기 때문입니다. – TerryE

+0

감사합니다. 답변을 업데이트하겠습니다. – AlexanderZ

+0

꼬리말을 잊어 버리셨습니까? 대체 문자열에 ;-) – TerryE

관련 문제