문제

이것은 또 다른 .htaccess 질문입니다. 그리고 나는 이미 문학 검토를했습니다. 어떤 도움에 감사 할 것입니다.

요구 사항 :

  1. 몇 개의 URL에 대해서만 https를 강제로 강제하십시오.
  2. 브라우저는 말해서는 안됩니다 부분적으로 암호화 된 페이지 SSL 페이지의 경우.

나는 CodeIgnitor를 사용하고 있으며 The를 조정했습니다 base_url 안에 config.php 에게:

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

따라서 URL에 액세스하는 경우 https:// 포함 된 모든 링크는 HTTPS에도있을 것입니다. 이것은 "부분적으로 암호화 된 페이지"문제를 피하는 것입니다.

다음 htaccess 코드로 시작했습니다.

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]

이 URL과 함께 알파벳, XYZ 또는 PQR HTTPS로 리디렉션되며 URL이없는 모든 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로 변경됩니다. 따라서 페이지가 부분적으로 암호화됩니다.

나는 또한 추가를 시도했다 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 후크를 사용하면 이것을 해결합니까?

미리 감사드립니다

도움이 되었습니까?

해결책 2

괜찮아 . 해결책을 찾았다 고 생각합니다. 서버에서도 테스트했습니다. 잘 작동합니다 .. 다시 쓰기에서 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(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

이제 (ABC, XYZ, PQR)가있는 페이지를 방문하면 https : //로 리디렉션됩니다. 또한 모든 임베디드 링크는 https에서 제공됩니다. 따라서 브라우저에는 부분 암호화 경고 (상태 표시 줄에 빨간색 경고 표시)가 표시되지 않습니다.

이 페이지 중 하나에서 멀어지면 해당 페이지가 참조 자 확인으로 인해 SSL에있을 것이며이 페이지에는 부분적으로 암호화 된 경고가 표시 될 수 있습니다 (그러나 함께 살 수 있음). 이 페이지에서 멀어지면 모든 것이 SSL이 아닙니다.

이것이 누군가를 돕기를 바랍니다 !!!

다른 팁

정적 내용을 다른 도메인에 넣을 수 있습니다. static.example.com 그러한 요청에 대해 HTTPS에서 HTTP로 리디렉션하는 것을 비활성화합니다.

사용 //static.example.com/… 문서와 동일한 URI 체계를 사용하는 리소스를 참조하기 위해 참조가 포함되어 있으며 RewriteRule 그러한 자원이 요청 된 경우 :

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !=static.example.com
RewriteRule !(^|/)(abc|xyz|pqr) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top