2010-12-02 2 views
1

아파치의 RedirectMatch 지시문을 사용하여 모든 사용자를 HTTPS URL 으로 리디렉션하려는 상황이 있습니다. 자신의 웹 스페이스에 액세스하는 단일 (Linux) 사용자를 제외합니다. 나는 사용자 이름 부정 정규식 코드 조각 발견 :아파치의 사용자 공간 URL을 반대로합니다.

^((?!andy).)*$ 

을하지만이 지침에서 사용하려고하면

RedirectMatch ^((?!andy).)*$ https://www.example.com/ 

의 URL :

http://www.example.com/~andy/ 

은 아직 도착 HTTPS URL로 리디렉션 됨 :

https://www.example.com/ 

리디렉션을 무시하고 싶습니다. 정규 표현식 (또는 Apache)의 전문가가 아니므로이 작업을하는 데 도움이 될 것입니다.

감사합니다, 스티븐

편집 : 확인, 플롯은 두껍게 ... 나는 줄 주석 경우 :

# RedirectMatch ^((?!andy).)*$ https://www.example.com/ 

을하고 아파치를 다시 시작한 다음 URL 시도 :

http://www.example.com/andy 

404 응답이 예상됩니다. 그러나, 나는 URL을 시도하는 경우 :

http://www.example.com/~andy 

리디렉션이 트리거 내가 리디렉션하고있다 :

https://www.example.com/ 

내가 말했듯이, 리디렉션이 주석하고 내가 서버를 다시 시작했다. 어떻게 될 수 있습니까? 그래서 이것은 정규 표현식이 아니라 아파치가 지시없이 방향을 바꾸는 것 같습니다!

+0

는주의 (대신 mod_alias가의 mod_rewrite를 사용) 랜디 (randy) 등. 나는 당신이 보는 행동을 설명 할 수 없다. –

답변

0

어쩌면이 라인을 따라 뭔가 있을까요? 그것은 또한`에 게재 할 수 있도록, '^ ((?! 앤디).) * $는`* 어디 *`andy` 포함하지 않는 모든 문자열과 일치 :

RewriteCond %{REQUEST_URI} !^/~andy(/|$) ... 
RewriteCond %{SCRIPT_URI} ^http: 
RewriteRule ^/(.*) https://mysite.com/$1 [R=307]
+0

답장을 보내 주셔서 감사합니다. 이것은 RedirectMatch와 정확히 같은 방식으로 작동하는 것으로 보입니다. 나는 사용자 webspace가 다르게 처리되어야한다고 생각한다. http://www.example.com/~qwerty (실제 사용자 웹 스페이스가 아님)를 사용하면 정규식이 작동하고 리디렉션되지 않습니다. – LostInTheWoods

관련 문제