2012-10-28 3 views
0

나는 다른 문자열로 시작하지 않는 문자열에만 일치하는 regex을 시도하고 있습니다. 내가 아는 한에서 some 다른 questions 여기에 스택 오버플로에 나는 부정적인 look-ahead 단언을 사용해야한다. 그러나 어떤 이유로 그것은 효과가없는 것 같습니다. 다음 세 가지 문자열을 고려 : 마지막 문자열이 excludepath/로 시작하기 때문에문자열로 시작하지 않는 문자열과 일치합니다.

/match.jpg 
match.png 
excludedpath/no-match.gif 

내가, 첫 번째 두 문자열을 일치에 내 정규식 패턴을합니다. 내가 시도한 것은 다음과 같다.

(?!excludedpath\/)(.*)\.(gif|jpg|png)$ 

Apache의 다시 쓰기 규칙에서이 정규식 패턴을 사용하고 싶다.

RewriteCond %{REQUEST_FILENAME} (?!excludedpath\/)(.*)\.(gif|jpg|png)$ 
RewriteRule ^(.*)$ $1 [L] 

RewriteCond "/my/path/to/application/%{REQUEST_URI}" !-f 
RewriteRule ^(.*)$ /index.php/$1 [L] 

누구는 여전히 세 개의 문자열과 일치하는 이유를 말해 줄 수 : This Link 어떻게 그것을 해결하기 위해 그들이 http://example.com/excludedpath/some-image.jpg의 형식에 있지 않으면 기본적으로 간단히 말해서 나는 (그 세 확장자를 가진) 모든 이미지를로드 할?

+0

: 당신의 Rubular 나 예를 마지막 문자열을 슬래시로 시작했기 때문에 당신이 두 변종을 제외 할 경우

, 당신은 내다에 옵션 슬래시를 추가 할 수 있습니다 : //stackoverflow.com/questions/6869679/negative-rewrite-rule-for-redirecting-everything-thats-not-an-image – ziya

답변

2

문자열의 시작 부분을 미리보기 위해 필요하지 않기 때문입니다. 그냥 다른 앵커를 추가합니다 (내다 차기에가 있기 때문에),하지만 그것을 기꺼이 두 번째 문자에서 일치하려고합니다

^(?!excludedpath\/)(.*)\.(gif|jpg|png)$ 

그렇지 않으면 물론 엔진 의지가 첫 번째 문자에 일치하지. 그리고 물론 xcludedpath...은 부정적인 선견자를 출발시키지 않습니다. 어쩌면 당신은 추가로 부정적인 상태 HTTP를 사용할 수 있습니다

^(?!\/?excludedpath\/)(.*)\.(gif|jpg|png)$ 
+0

Perfect. 감사! – user6669

관련 문제