2009-11-29 2 views
3

깨끗한 URL에 mod_rewrite을 사용하는 PHP-Apache 응용 프로그램이 있습니다. 나는 특정 페이지와 경로를 HTTPS로 보내면서 많은 다른 것들을 HTTP로 유지하면서 많은 수고를 들이고있다.'mod_rewrite'사용하기 특정 경로에 HTTPS를 사용하고 다른 모든 경로에 HTTP를 사용하려면 어떻게해야합니까?

// http://www.example.com/panel/ -> Should always redirect to HTTPS 
// http://www.example.com/store/ -> Should always redirect to HTTPS 

// Anything not in the above should always be HTTP 
// so... 
// https://www.example.com/not-in-above-rules -> Should always redirect to HTTP 

어떤 아이디어 : 여기

무슨 뜻인지의 예입니다?

답변

10

당신은 당신이 뭔가를 넣을 수 있습니다 : 80 가상 호스트 :

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(panel/|store/payment) https://%{HTTP_HOST}%{REQUEST_URI} 

그리고이 당신에 : 443 가상 호스트를 이러한 솔루션의

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule !^(panel/|store/payment) http://%{HTTP_HOST}%{REQUEST_URI} 
+0

위대한 답변, 감사합니다! – Ryall

+0

다른 RewriteRule과의 관계는 어떻게됩니까? -> 충돌하는 규칙을 위해 config 파일 트리를 확인해야합니까? –

0

그것을 할 수 있습니다 :

RewriteCond %{HTTP_HOST}   ^www.example.com(:80)?$ 

RewriteRule ^/panel/(.*) https://www.example.com/panel/$1 [R=301,L]

좋은 보안의 일반적인 규칙은이

+0

이렇게하면 패턴과 일치하지 않는 HTTPS가 HTTP – Ryall

+0

(으)로 리디렉션되지 않습니다. 정량 한다 RewriteCond % {HTTP_HOST}^www.example.com : 80 $ 또는 한다 RewriteCond %는 {HTTPS는} = 또는 한다 RewriteCond % {SERVER_PORT}에 물론^443 $ – Ass3mbler

+0

당신은 어떤을 사용하거나 모두 세 가지! RewriteRule 지시문 앞에 RewriteCond – Ass3mbler

2

희망이 도움 다른 경로에 대한 같은 : 일부의 경우 귀하의 사이트에 HTTPS가 필요하다면 귀하의 사이트에에 H가 필요합니다 TTPS. 결제 섹션에서 HTTPS를 사용하는 경우 방문 페이지도 HTTPS 여야합니다.

+0

왜 이것을 말하는지 알고 싶습니까? HTTPS는 IMHO가 필요하지 않을 때 피할 수있을 정도로 성능을 크게 향상시킵니다. 그렇다면 지불 세부 사항이 아닌 모든 종류의 데이터를 송수신하는 것이 맞을 수도 있습니다. 요청에 응답하는 것 이외의 데이터가 전송되지 않는 페이지가 필요한 이유는 알 수 없습니다. – Ryall

+0

사이트의 일반 부분은 HTTPS를 통해 전달되지 않는 경우 * 신뢰할 수 없습니다 *. 사이트의 일반 부분이 HTTPS를 통해 전달되지 않고 지불 부분에 대한 링크를 공격 사이트에 다시 쓰는 경우 하나의 공격 벡터가 MIM에 전송됩니다. 링크는 사이트에서 제공하지만 신뢰할 수는 없지만 공격자가 다시 작성할 수 있습니다. – yfeldblum

+1

HTTPS 요청에 가치가있는 MIM 보호 기능의 보안 이점은 충분합니까?아마존은 그렇게 생각하지 않는 것 같습니다. – Ryall

0

없음 꽤 URL의와 함께 작동하지 않습니다. 한 가지 제안 : 우리는 재 작성에서 http_host를 사용하는 브라우저 보안 경고를 받고있었습니다. 분명히, Thawte는 지체가 있으므로 'www'가 붙은 접두어는 인증서의 유효성에 대한 차이를 만들어냅니다.

RewriteCond %{HTTP_HOST} ^www\.mysite\.com [NC] 
RewriteRule ^(login\.php|members\.php)$ https://%{HTTP_HOST}%{REQUEST_URI} 
RewriteCond %{HTTP_HOST} ^mysite\.com [NC] 
RewriteRule ^(login\.php|members\.php)$ https://www.${HTTP_HOST}%{REQUEST_URI} 

또는 약간 적은 공간에서 그것을 할, 당신은 2 라인과 하드 코드 도메인을 삭제할 수 있습니다 : 여기에 항상 'WWW'로 시작되는 보안 사이트로 리디렉션 보장하기 위해 몇 줄은 4 일. 더 세련된 방법이있을 것이라고 확신하지만, htaccess는 실망 스럽습니다.

관련 문제