2008-08-12 13 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 solutions​​ですが、私の人生の間、私はその反対をすることはできません。

アイデア?

答えて

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

私は、投票者がダウン投票の理由を説明するコメントを残すことを要求されることを希望します。個人的には、開発者として開発していたサーバーにアクセスできないが、そのページにアクセスしていない限り、この回答は選択しません。 1つの問題は、これを機能させるには、各ページのすべてのパスをハードコードする必要があることです。重要な使用事例でJavaScriptが有効になっていると思われる場合は、JavaScriptを使用してhttpに変更する方がよいでしょう。上記の答えは、サーバーで発生するため、javascriptを必要としないため、より優れています。 – Rustavore

+2

単純に:htaccessはそれよりはるかに優れているためです。また、証明書を持っていない場合は、httpsプロトコルをhttpにリダイレクトするように問題を修正します。 – miduga

+1

アクションはサーバによって処理されるべきであり、それが提供するかもしれない「a」ドキュメントではありません。 – albal

11

、これがない単一のサーバーではなく、Aの上に、私のために働いソリューションですクラウド的環境

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>ディレクティブは、Apache 2でのみ使用可能です。

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

をし、この1は間違いな方法でプロキシせずに動作します: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] 
関連する問題