2010-07-27 5 views
1

나는이 규칙을 사용하고 있습니다 :

내가 localhost/foo 입력하지만 a 변수가 대신 foo의 비어있을 때 그것은 headers.php로 재 작성 (Regex match this OR that?에 큰 기여 기준)

RewriteRule !^(.*?/.*|.*?\.(?:php|html)$)$ headers.php?a=$1 [L] 

을 (내가 var_dump($_REQUEST)로 확인)

왜 그런가? 사용해 보았습니다

RewriteCond %{REQUEST_URI} !headers 

하지만 그게 아니 었습니다.

감사합니다.

답변

2

규칙이 무효화되므로 정규 표현식 이 처리되지 않는과 일치하지 않는 경우에만 규칙이 실행됩니다. 캡처 그룹이 localhost/foo과 일치하지 않기 때문에 $1에 입력하는 정규식 엔진은 없습니다. 해결 방법은 RewriteRule 지시어에 부정을 사용하지 않고 대신 RewriteCond 지시어를 사용하여 부정 된 정규식을 검사하는 것입니다. 다음 룰셋이 작동해야합니다. (내가 테스트하지는 않았지만 어딘가에 실수가있을 수 있습니다.)

RewriteCond %{REQUEST_URI} !/.*/ 
RewriteCond %{REQUEST_URI} !\.(html|php)$ 
RewriteRule (.*) headers.php?a=$1 [L] 
+0

멋진 아이디어! 샘플 코드가 작동하지 않지만 나에게 큰 도움을주었습니다 :) 감사합니다! – johnjohn

+0

1 분 전에 오류를 수정하기 위해 코드를 편집했습니다. 최신 버전을 테스트하고 있는지 확인하십시오. (아직도 잘 모르겠지만, 테스트 할 수있는 아파치 서버가 없습니다.) – bcat

+0

다시 한번 감사드립니다. 어딘가에 여전히 오류가 있습니다. '요청한 URL/foooo가이 서버에서 발견되지 않았습니다. '를 반환합니다. – johnjohn

관련 문제