2010-06-25 4 views
0

보안 영역 인 경우 도메인을 https로 전환하는 내 .htaccess 규칙을 다시 작성합니다.http로 리디렉션

RewriteCond %{SERVER_PORT} =443 
RewriteCond %{REQUEST_URI} !^/account(.*)$ 
RewriteCond %{REQUEST_URI} !^/shop/checkout(.*)$ 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R,L] 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^account(.*)$ https://www.domain.com/account$1 [R,L] 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^shop/checkout(.*)$ https://www.domain.com/shop/checkout$1 [R,L] 

# Route all traffic to index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?_args=$1 [L,QSA] 

처음 3 개 라인은 리디렉션 순환의 결과로 주석 해제 : 나는이 아니 안전한 지역을 heres 내 규칙이 경우는 HTTP로 전환하고자합니다. 도움이 필요합니다

답변

2

RewriteCond 쌍이 항상 true으로 계산되므로 리디렉션 루프가 발생합니다. 먼저 SSL 포트에 있는지 확인한 다음 요청이 보안 경로와 일치하지 않는지 확인하려고합니다.

귀하의 세 가지 주석 처리 된 라인 그러므로이 변경되어야합니다

RewriteCond %{SERVER_PORT} =443 
RewriteCond %{REQUEST_URI} !^/account(.*)$ 
RewriteCond %{REQUEST_URI} !^/shop/checkout(.*)$ 
RewriteRule ^(.*)$ http://www.domain.com/$1 

편집 :은 분명히 당신이 리디렉션에 명시 적 [R,L] 필요 실제로 않습니다. 또한 mod_rewrite/index.php의 내부 리디렉션을 수행합니다.이 리디렉션은 RewriteCond에 의해 검사 된 보안 경로와 일치하지 않으므로 다시 작성된 규칙은 다시 http 도메인으로 다시 작성됩니다.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{SERVER_PORT} =443 
RewriteCond %{REQUEST_URI} !^/account(.*)$ 
RewriteCond %{REQUEST_URI} !^/shop/checkout(.*)$ 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(shop/checkout|account)(.*)$ https://www.domain.com/$1$2 [R,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)?$ index.php?_args=$1 [QSA] 
이 이 당신을 귀찮게하는 경우 가능 그래서 사람들은 여전히 ​​이론적으로, http://www.domain.com/index.php?_args=account을 통해 안전하지 않은이 길을 올 수

RewriteCond 좀 더 복잡한을 작성하려면 다음과 같이 다소 비 절대 안전한 방법이기는하지만 이러한 문제를 모두 해결해야 다음 그 상황을 처리하기위한 지침. 비록 당신이 그것에 대해 걱정하지 않는다면 그것은 약간 과잉이다. 불행히도 내부 재 작성이 수행되었음을 알고 있다는 것을 잘 알고있는 좋은 방법은 없습니다. 그렇지 않으면이를 설명하기가 훨씬 쉬울 것입니다.

+0

이것은 나를 위해 작동하지 않았다. https로 이동할 때 나는 리다이렉트 루프를 얻는다. 또한 당신이 포트 443을 의미한다고 가정한다. – mononym

+0

고침. 또한,'REQUEST_URI'는 슬래시로 시작합니다. 이것은'RewriteCond'가 올바르게 일치하는 것을 막아 왔을 것입니다. –

+0

여전히 작동하지 않습니다. 내 원래 질문에서 내 규칙을 편집했습니다. 도움을 청했습니다. – mononym

관련 문제