2012-10-21 5 views
52

https://www.example.comhttp://www.example.comにリダイレクトしようとしています。私はこのコードが正常にhttp://www.example.comhttps://example.comをリダイレクト httaccessを使用してhttpリダイレクトする方法

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

.htaccessファイルに次のコードを試してみました。しかし、私が https://www.example.comと入力すると、ブラウザに「Webページが利用できません」というエラーが表示されます。

Iはまた

しようと試み上記1

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L] 

試み2

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

両方が失敗成功せずに次の2つのコードを試みました。助言がありますか?

答えて

82

試行2は完璧に近いものでした。あなたのウェブサイトは、セキュリティ証明書を持っていない場合

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

は 'R = 302'を使用して良いだろう。これは私のSSLが切れたときに私を困らせてくれました。私は苦しい更新手続きを経る前に一時的に 'http'に戻りたいと思っていました。 – ProfNandaa

+0

痛い更新? certificareファイルのフリップか単純なスクリプトの実行のいずれかでなければなりません... 302の問題は、クライアントが毎回それに従わなければならないということです。クライアントとサーバ側の要求数を増やす必要があります。 – arkascha

+0

@arkaschaちょうど理解したかったのですが、RewriteCondはifステートメントとして動作しますか?私はそれがhttpsを見つける場所だけを意味し、次の書き換えルールを実行します。私はどこからでもリンクしなくても、Googleが自動的にインデックスの2つのhttps URLを取得しているので、私は尋ねています。したがって、私たちはすべてのhttps url –

6
RewriteEngine On 
RewriteCond %{SERVER_PORT} 443 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

これは、他の人がそうしないときにトリックを行うように見えます! –

22

しかし、それは共有ホスティング環境上だし、あなたのウェブサイトがあるとき、あなたは「警告」を取得する必要はありません。ただ、少しそれを変更https経由でリクエストされた場合、htaccessを使用してリダイレクトすることはできません。その理由は、要求がhtaccessファイルに送られる前に警告メッセージがトリガされるため、サーバー上で修正する必要があるからです。 /etc/httpd/conf.d/ssl.confに移動し、仮想サーバーに関する部分をコメントアウトしてください。しかし、あなたのホスティングプロバイダがそれほど多くの制御を与えることはないでしょう。だからあなたは別のホストに移動するか、SSLを購入するだけで、あなたのhtaccessがリダイレクトする機会が来る前に警告が発せられないようにする必要があります。

+1

ありがとうございました。私の既存のサイトはSSL証明書を持っていないので、私の.htaccessがどんなに正しいかに関係なく、うまく動作しません。 – marknt15

+0

@arkaschaここではさまざまな方法を試しましたが、うまくいきませんでした。はい、共有環境でテストしました。共有SSLは無料ですが、SSLはアクティブではありません。問題のhttpsリンクは、以前はSSL対応の環境から継承されたものです。私はブラウザの警告(devモード)に気にしないが、少なくともリダイレクトが必要だった。これ以上のリードを提供できる人はいませんか? –

1

httpとhttpsの違いは、https要求がSSL暗号化接続を介して送信されることです。ブラウザーがhttp要求を送信する前に、ブラウザーとサーバーの間にsslで暗号化された接続を確立する必要があります。

Https要求は、実際にはSSLで暗号化された接続を介して送信されるHTTP要求です。サーバーがSSL暗号化接続の確立を拒否した場合、ブラウザーは要求を送信するための接続を持ちません。ブラウザとサーバーは互いに話す方法がありません。ブラウザーは、アクセスしたいURLを送信することができず、サーバーは別のURLへのリダイレクトで応答することができません。

これはできません。 httpsリンクに応答する場合は、SSL証明書が必要です。HTTPSは、(リクエストが使用して作られにある場合

チェック:

RewriteEngine On 


RewriteCond %{HTTPS} ^on$ 
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

説明:

5

あなたはhttpsのへのHTTPからリダイレクトするために以下のルールを使用することができますhttps)

そして

RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

http://example.com/fooに任意の要求(https://example.com/fooをリダイレクトします。

  • $ 1のRewriteRuleパターンの正規表現の一部であり、それは、で捕獲されたどのような値が含まれ(。+)、この場合には、ドメイン名の後にフルREQUEST_URIすべてをキャプチャします。

  • [NC、L、R]はフラグで、NCはuri caseを作成します。要求に大文字または小文字の両方を使用できます。

Lフラグがcurruntルールが一致した場合、他のルールをproccessing停止するようにサーバーに指示します、あなたがブロック内のルールに、より多くを持っている場合、ルールの競合を避けるために、Lフラグを使用することが重要です。

Rフラグは、外部リダイレクトを行うために使用されます。

0
RewriteCond %{HTTP:X-Forwarded-Proto} =https 
+0

これは私を助けます。 –

0

コードは正しいです。ただ、<VirtualHost *:443>

例の内部でそれらを置く:あなたは_permanent_を作るしたくない場合

<VirtualHost *:443> 
    SSLEnable 

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

</VirtualHost> 
関連する問題