2010-04-26 6 views
5

저는 Apache를 사용하고 있으며,받은 모든 요청을 ssl 가상 호스트로 리디렉션하려고합니다.Regex - 특정 패턴을 제외한 모든 것을 일치시키는 방법

RedirectMatch에 https://www.mydomain.com basicaly 모두에 의해 $ 1을 (를) 대체하는 $ (1)

:

그래서 나는 일반 HTTP 가상 호스트에 다음 줄을 (*.).

완벽하게 작동합니다. 하지만 이제는 SSL 가상 호스트에있을 수없는 특정 CGI에 액세스해야합니다. 그래서 나는 다음을 제외한 모든 요청을 리디렉션 싶습니다

"http://www.mydomain.com/mycgi/cgi.php"

나는이 포럼에서 검색이 정규식 제외에 관한 몇 가지 게시물을 찾았지만 아무도가 작동하지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다.

감사합니다. 알랭

답변

2

Apache 2.2 이상은 정규 표현식에서 부정적인 미리보기 지원을 갖습니다. Apache 2.2 이상을 사용하는 경우 다음이 작동합니다.

RedirectMatch ^/(?!mycgi/cgi.php)(.*) https://www.mydomain.com/$1 
+0

고맙습니다. 그것은 완벽하게 작동합니다. 당신은 지금 거의 8 시간 동안 내가 일하고 있었던 30 분 이내에 해결했습니다! – Alain

+0

URL이 다음과 같으면 제대로 작동합니까? mycgitest/cgi.php? – Felix

1

나는 RedirectMatch가 short-circuit sorta deal이라고 생각합니다. 이것이 의미하는 바는, 만약 당신이 match-all보다 다른 RedirectMatch를 넣으면 첫 번째 매치 만 실행된다는 것입니다. 그래서 ...

RedirectMatch (/mycgi/cgi.php) http://www.mydomain.com$1 
RedirectMatch (.*) https://www.mydomain.com$1 
+0

+1 몇 초 동안 나를 이길 수 있습니다. 첫 번째 규칙은 'http'로 리디렉션되어야하며 '/'를 앞에 추가해야합니다. –

+0

첫 번째 규칙으로 인해 리디렉션 루프가 발생하지 않습니까? –

+0

와우 ... 정말 빨랐어 요 !!! 그러나 유감스럽게도 "일반 SSL이 아닌"가상 호스트에이 행을 추가하면 작동하지 않습니다. 파이어 폭스가 저에게 오류를 제공합니다 : 파이어 폭스가 서버가이 주소에 대한 요청을 결코 완료하지 않을 방법으로 리디렉션하고 있음을 감지했습니다. 그리고 아파치에게 리디렉션을 요청하기 때문에 이것이 정상이라고 생각합니다. 그래서 아파치는 요청을 받고, 첫 번째 정규식과 일치시킨 다음 자신에게 리디렉션하고, 다시 일치시키는 식으로 진행합니다. 그 생각에 대해? SSL 가상 서버에 줄을 배치하려고 시도했지만 무시됩니다. Alain – Alain

관련 문제