2011-08-14 6 views
4

에 HTTPS를 모든 페이지에 HTTP를 강제로 :htaccess로는 : 나는 다음과 같은 한 디렉토리 만

디렉토리가 소위 "보호"하는 경우
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} protected [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !protected [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 

, 사용자가 HTTPS를 사용하고 있는지 확인하십시오. 디렉토리가 "protected"를 제외한 것이면 사용자가 http를 사용하고 있는지 확인하십시오.

위대한 작품이지만 어떻게 추가 디렉토리를 지정합니까?

또한 디렉토리를 두 ​​번 지정하지 않아도 수행 할 수있는 방법이 있습니까? 그것을 포함하기위한 한 번 그리고 그것을 제외하기위한 한 번?

감사합니다.

UPDATE

내 "보호"폴더 인해 내 규칙에 HTTPS를 사용하도록 강요했지만, 여전히 리디렉션되고 있었다 "보호"폴더에없는 이미지, 스타일 시트, 그리고 자바 스크립트에 대한 참조 http. 이로 인해 "보호 된"페이지가 부분적으로 만 안전합니다. (당신이 실수로 제거하지 LocationMatch이 htaccess로에서 사용할 수 없습니다,하지만 방법은 당신이 할 수 있습니다)

RewriteRule \.(css|gif|jpe?g|js|png|swf)$ - [L] 

답변

7
RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} protected [NC,OR] 
RewriteCond %{REQUEST_URI} protected2 [NC,OR] 
RewriteCond %{REQUEST_URI} protected3 [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !protected [NC] 
RewriteCond %{REQUEST_URI} !protected2 [NC] 
RewriteCond %{REQUEST_URI} !protected3 [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 

의 한 줄 정규식을 복사하기 쉬운 충분하다! http://httpd.apache.org/docs/current/mod/mod_rewrite.html#RewriteCond

+0

좋은 솔루션이 htaccess로 제한하는 경우 :


다음은 mod_rewrite를 조건에 대한 자세한 내용입니다. – yakatz

+4

.htaccess에 국한되지 않는 한 더 나은 해결책은 무엇입니까? –

+0

WordPress를 사용하는 경우 기본 WordPress를 다시 작성하기 전에이 단어를 넣어야합니다. 그렇지 않으면 예상대로 작동하지 않을 수 있습니다! – cfx

0

나는 가상 호스트 구성에서 그것을 할 : 리디렉션 코드에 다음과 같은 사전을 추가하면이 해결
내가 두 번째 시나리오 (비보안로 리디렉션)을 테스트 한 적이 없다

<VirtualHost *:80> 
    ... 
    <LocationMatch "(.*(p|P)hpMyAdmin.*)"> 
     RedirectPermanent/https://__SERVER__/ 
    </LocationMatch> 
</VirtualHost> 
<VirtualHost *:443> 
    ... 
    <LocationMatch "!(.*(p|P)hpMyAdmin.*)"> 
     RedirectPermanent/http://__SERVER__/ 
    </LocationMatch> 
</VirtualHost> 

만합니다 (! 배치에 대해 확실하지) 작동합니다 (서버와 __SERVER__ 교체가 자동 아닙니다.).
는 아직 그들을 두 번 지정하지하는 좋은 방법을 발견하지 않은,하지만 당신이 더 많은 옵션을 추가 할 수 OR를 사용할 수있는 LocationMatch

관련 문제