2009-11-30 6 views
3

이것은 또 다른 .htaccess 질문입니다. 그리고 나는 이미 나의 문헌을 검토했다. 어떤 도움을 주시면 감사하겠습니다.htaccess (https to http)

요구 사항 : 몇 URL에

  1. 포스 HTTPS.
  2. 브라우저는 부분적으로 암호화 된 페이지 인 SSL 페이지의 경우이라고해서는 안됩니다.

나는에 config.php를BASE_URL을 CodeIgnitor을 사용하고 쥐게하고 있습니다 : URL이 https로 액세스 할 경우

$config['base_url'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 'https://' : 'http://' ; 
$config['base_url'] .= $_SERVER['HTTP_HOST']; 
$config['base_url'] .= preg_replace('@/[email protected]','',dirname($_SERVER['SCRIPT_NAME'])).'/'; 

그래서 : // 모든 링크 그 안에 포함 된 또한 "부분적으로 암호화 된 페이지"문제를 피하기위한 것입니다.

나는 다음과 같은 htaccess로 코드로 시작이 ABC, XYZ 또는 PQR을 갖는 임의의 URL로

RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L] 

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

HTTPS로 리디렉션되고있는 URL은 다시 강요 당할 것이다 가지고 있지 HTTP로.

이것은 제대로 작동했지만 "부분 암호화 된 페이지"문제는 피할 수 없다는 점에서 유일한 문제입니다. 예를 들어 URL이 http://www.example.com/abc/index.php 일 경우 https://www.example.com/abc/index.php으로 리디렉션됩니다. 그러나이 페이지의 링크는 후자의 재 작성 규칙 때문에 https://www.example.com/images/logo.png으로 변경됩니다. 이로써 페이지가 부분적으로 암호화됩니다.

또한이 문제를 해결하기 위해 http_referer 검사를 추가했지만이 문제는 해결되지 않을 것입니다. HTTPS 페이지에서 발생하는 모든 클릭은 절대로 HTTP로 변환되지 않기 때문입니다.

RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_REFERER} !^(https)(.*)$ 
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 

이 간단한 문제에 대한 더 나은 접근 방법이 있는지 알고 싶거나 잘못하고 있습니다. .htaccess 대신 CI 후크를 사용하면이 문제를 해결할 수 있습니까? 사전

+0

메신저 그냥 묻습니다. 왜 사용자 정보를 비공개로 유지하지 않겠습니까? – TheCrazyProfessor

답변

0

좋아요. 솔루션을 찾은 것 같습니다. 나는 내 서버에서도 그것을 테스트했다. 잘 작동합니다 .. 는 당신이 페이지 중 하나를 방문하는 경우

RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_REFERER} !^https(.*)/(abc|xyz|pqr)(.*)$ [NC] 
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 

이제 재 작성에 너무 HTTP 리퍼러 조건을 필요로 (ABC는 XYZ가, PQR)가 HTTPS로 리디렉션됩니다 : // ... 도 모두 포함 링크가 https에서 제공됩니다. 따라서 브라우저는 부분 암호화 경고 (상태 표시 줄에 빨간색 경고 기호)를 표시하지 않습니다.

이러한 페이지 중 하나에서 벗어나면 해당 페이지는 참조 자 확인으로 인해 SSL로 표시되며 부분적으로 표시 될 수 있습니다 암호화 된 경고 (그러나 나는 그것과 함께 살 수있다). 일단이 페이지에서 벗어나면 모든 것이 비 SSL이됩니다.

호프가 도움이 되었기를 바랍니다.

0

에서

덕분에 당신은 그런 요청을 리디렉션 static.example.com 같은 다른 도메인에 정적 내용을 넣고 HTTP에 HTTPS를 사용하지 않도록 할 수있다.

사용 //static.example.com/…는 자원을 요청하면 자원이 RewriteRule의 참조가 포함되는 문서 및 테스트와 같은 URI 체계를 사용하는 것을 참조하십시오 :

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !=static.example.com 
RewriteRule !(^|/)(abc|xyz|pqr) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 
+0

이 경우 example.com의 페이지에 static.example.com의 내용이있는 경우 브라우저는 부분적으로 암호화 된 페이지 – shikhar

+0

을 보여줍니다. @shikhar : 내 진술을 명확히했습니다. – Gumbo