2008-08-12 2 views
136

어떻게 HTTPS를 HTTP로 리디렉션합니까? 즉, 모든 사람이 가르치는 것의 반대입니다.어떻게 HTTPS를 HTTP로 리디렉션합니까?

SSL 인증을받은 HTTPS에 대한 서버와 인증을 받기에 적합하지 않은 비상용으로 유지하지 않은 미러 서버가 있습니다.

클라이언트의 데스크톱에 http://production_serverhttps://production_server (모두 작동)을 가리키는 바로 가기가 있습니다. 그러나 프로덕션 서버가 다운되면 DNS 포워딩이 시작되고 바로 가기에 "https"가있는 클라이언트는 https://mirror_server (작동하지 않음)과 큰 뚱뚱한 Internet Explorer 7 빨간색 화면이 보입니다. 내 회사에 대한 불안감.

불행히도 클라이언트 수준에서 전환 할 수는 없습니다. 이 사용자들은 매우 컴퓨터 문맹이며, HTTPS "보안"오류 (특히 Firefox 3 및 Internet Explorer 7에서 요즘 다루는 방식 : FULL STOP, 고맙게도 일종의 LOL입니다.)을 보지 못하게 할 가능성이 매우 큽니다.

very easyto findApache solutionshttp->https redirection에 대한 것이지만 내게는 그 반대입니다.

아이디어가 있으십니까?

답변

114

이 테스트되지 않았습니다하지만 난이 mod_rewrite를에게

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 
+0

어떻게 작동합니까 (이 코드를 작동하려면이 코드를 내 도메인으로 변경해야합니까?) – Enve

+1

Enve : 사이트의 vhost_ssl.conf 구성 (또는 사이트 루트의 .htaccess)에 추가하기 만하면됩니다. 아무것도 변경하지 않아도 동적으로 동일한 호스트 이름과 URL 경로를 사용합니다. – Meogi

+1

나는 쿼리 문자열을 잡을 수도 있다고 생각한다. 확실하지 않지만 위의 스 니펫은 https에서 http로 쿼리 문자열을 전달하지 않습니다. – Rustavore

64

를 사용하여 작업 재 작성 엔진은 HTTP 요청이 접수 된 후에서 개막 있음을 명심해야한다고 생각 - 당신은 여전히 ​​인증서를 필요 의미 클라이언트가 요청을 보내기 위해 연결을 설정하기 위해서!

그러나 백업 시스템이 클라이언트와 관련하여 동일한 호스트 이름을 갖는 것으로 나타나면 주 프로덕션 시스템과 동일한 인증서를 사용할 수 없습니다.

+0

어떻게이 한계를 극복 할 수 있습니까? 나는 같은 문제를 겪고있다. 리디렉션 전에 브라우저에서 certifcate 오류가 발생했습니다. –

-7

지금까지 내가 간단한 메타 새로 고침 알고 있어요으로도 원인이 오류없이 작동합니다 ejunker의 답변에 따라

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'"> 
+11

나는 투표자가 투표 실패 이유를 설명하는 코멘트를 남겨두기를 바란다. 개인적으로 개발자를 위해 개발중인 서버에 대한 액세스 권한이 없지만 페이지에 대한 액세스 권한이없는 한이 대답을 선택하지 않습니다. 한 가지 문제는이 작업을 수행하려면 모든 페이지의 모든 경로를 하드 코딩해야한다는 것입니다. 중요한 사용 사례에 대해 JavaScript를 사용할 수 있다고 가정 할 수 있다면 JavaScript를 사용하여 http로 변경하는 것이 좋습니다. 위의 답변은 자바 스크립트가 서버에서 발생하기 때문에 필요하지 않기 때문에 더 좋습니다. – Rustavore

+2

간단히 말하면, htaccess가 그보다 훨씬 좋은 옵션이기 때문입니다. 또한 인증서가없는 경우 https 프로토콜을 http로 리디렉션하도록 문제를 해결합니다. – miduga

+1

조치는 서버가 처리해야하며 'a'문서가 처리 할 수 ​​없습니다. – albal

11

, 이것은하지 단일 서버에서 만에, 나를 위해 일하는 솔루션입니다 구름 환경

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{ENV:HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
4

위의 해결책으로 내 서버에 일 것입니다 (그들은 나를 위해하지 않았다) 여기 당신을 위해 작동하지 않는 경우 :

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

종종 'L'("마지막 규칙"을 의미)을 원하지 않을 것입니다. 당신이 wordpress 또는 다른 CMS를 사용하고 있다면,'L' 플래그는 페이지 요청이 적절히 라우팅되는 것을 막을 수 있습니다. 대신 다음을 사용하십시오 :'RewriteRule^(. *) $ http : // % {HTTP_HOST}/$ 1 [R = 301]' – Rustavore

6

.conf 파일을 사용하는 경우.

<VirtualHost *:443> 
    ServerName domain.com 
    RewriteEngine On 
    RewriteCond %{HTTPS} on 
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

    SSLEngine on 
    SSLCertificateFile /etc/apache2/ssl/domain.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/domain.key 
    SSLCACertificateFile /etc/apache2/ssl/domain.crt 

</VirtualHost> 
1

가능한 경우 mod_rewrite를 사용하지 않는 것이 좋습니다. 귀하의 경우에는 나는이로 재 작성을 대체 할 것이다 :

<If "%{HTTPS} == 'on'" > 
      Redirect permanent/http://production_server/ 
    </If> 

<If> 지시어는 아파치 2에서만 사용할 수 있습니다.

RewriteCond %{HTTP:X-Forwarded-Proto} =https 
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

을 본 사람은 확실히 방법으로 프록시없이 작동 : 4 + 내가 cloudflare을 사용하는 경우 위의 모든 작동하고 있지 않습니다 blog here

3

에 따라,이 사람은 나를 위해 일한

RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
0

아무 대답도 Wordpress 웹 사이트에서 작동하지만 다음 작품들 (다른 답변과 비슷하지만 약간의 변경이 있음)

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
관련 문제