76

https://www.example.comhttp://www.example.comにリダイレクトしようとしています。.htaccess ファイルで次のコードを試しました

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

このコードは、 https://example.comhttp://www.example.comに正常にリダイレクトします。ただし、https://www.example.comと入力すると、ブラウザに「Web ページが利用できません」というエラーが表示されます。

次の2つのコードも試しましたが成功しませんでした

試行 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}

上記の試みは両方とも失敗しました。助言がありますか?

4

7 に答える 7

125

試行2はほぼ完璧でした。少し変更するだけです。

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

アップデート:

上記のソリューションは、技術的な観点から機能します。しかし

数年後、ユーザーは接続がプライベートではないことを示す大きな警告を受け取ります。これは当然のことです。明らかな理由により、今日のブラウザはいずれも暗号化された接続から暗号化されていない接続にサイレントに切り替わることはありません...標準のブラウザの動作を回避することはできません。ただし、これはリダイレクト自体とは何の関係もありません。これが、今日のWebの仕組みであり、ユーザーを犯罪目的から保護する方法です。

于 2012-10-21T17:02:48.620 に答える
13

次のルールを使用して、httpsからhttpにリダイレクトできます。

 RewriteEngine On


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

説明 :

RewriteCond %{HTTPS} ^on$

HTTPSがオンになっているかどうかを確認します(リクエストはhttpsを使用して行われます)

それで

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

リクエスト ( https://example.com/foo ) http://example.com/fooにリダイレクトします。

  • $1 は RewriteRule パターンの正規表現の一部であり、(.+)でキャプチャされた値が含まれます。この場合、ドメイン名の後の完全な request_uri がすべてキャプチャされます。

  • [NC,L,R] はフラグです。NC は uri の大文字と小文字を区別します。リクエストでは大文字と小文字の両方を使用できます。

L フラグは、現在のルールが一致した場合に他のルールの処理を停止するようにサーバーに指示します。ブロック内に複数のルールがある場合は、ルールの競合を避けるために L フラグを使用することが重要です。

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

于 2016-01-08T10:15:48.137 に答える
4

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

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

したがって、これは不可能です。https リンクに応答する場合は、ssl 証明書が必要です。

于 2015-07-23T07:10:30.583 に答える