https://www.example.com を http://www.example.com にリダイレクトしようとしています。 .htaccessファイルで次のコードを試しました
RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
このコードは、 https://example.com を http://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}
上記の両方の試みは失敗しました。助言がありますか?
試行2はほぼ完璧でした。少し変更するだけです:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
ただし、Webサイトにセキュリティ証明書がなく、共有ホスティング環境にあり、Webサイトがhttpsを介して要求されているときに「警告」を受け取りたくない場合は、htaccessを使用してリダイレクトできません。その理由は、リクエストがhtaccessファイルに到達する前に警告メッセージがトリガーされるため、サーバーで修正する必要があるためです。 /etc/httpd/conf.d/ssl.confに移動して、仮想サーバー443に関する部分をコメントアウトします。しかし、オッズは、ホスティングプロバイダーがそれほど制御できないことです。したがって、htaccessがリダイレクトする前に警告がトリガーされないように、別のホストに移動するか、SSLを購入する必要があります。
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
次のルールを使用して、httpsからhttpにリダイレクトできます。
RewriteEngine On
RewriteCond %{HTTPS} ^on$
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]
説明 :
RewriteCond %{HTTPS} ^on$
HTTPSがonであるかどうかを確認します(要求はhttpsを使用して行われます)
次に
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]
リクエストをリダイレクト( https://example.com/foo )tohttp:// example。 com/foo 。
$ 1はRewriteRuleパターンの正規表現の一部であり、(。+)でキャプチャされた値が含まれます。この場合、完全なrequest_uriすべてをキャプチャしますドメイン名の後。
[NC、L、R]はフラグで、NCはuriの大文字と小文字を区別します。リクエストでは大文字と小文字の両方を使用できます。
Lフラグは、カラントルールが一致した場合に他のルールの処理を停止するようサーバーに指示します。ブロック内に複数のルールがある場合、Lフラグを使用してルールの競合を回避することが重要です。
Rフラグは、外部リダイレクトを行うために使用されます。
Httpとhttpsの違いは、https要求がssl-encrypted接続を介して送信されることです。ブラウザーがhttp要求を送信する前に、ブラウザーとサーバーの間にSSL暗号化接続を確立する必要があります。
Httpsリクエストは、実際には、SSL暗号化接続を介して送信されるhttpリクエストです。サーバーがSSL暗号化接続の確立を拒否した場合、ブラウザーには要求を送信するための接続がありません。ブラウザーとサーバーは互いに通信する方法を持ちません。ブラウザはアクセスしたいURLを送信できず、サーバーは別のURLへのリダイレクトで応答できません。
したがって、これは不可能です。 httpsリンクに応答する場合は、ssl証明書が必要です。
RewriteCond %{HTTP:X-Forwarded-Proto} =https
あなたのコードは正しいです。それらを<VirtualHost *:443>
の中に入れるだけです
例:
<VirtualHost *:443>
SSLEnable
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI}
</VirtualHost>