web-dev-qa-db-ja.com

htaccessを使用したHTTPリダイレクトへのHTTP

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}

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

65
Ansh

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

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

ただし、Webサイトにセキュリティ証明書がなく、共有ホスティング環境にあり、Webサイトがhttpsを介して要求されているときに「警告」を受け取りたくない場合は、htaccessを使用してリダイレクトできません。その理由は、リクエストがhtaccessファイルに到達する前に警告メッセージがトリガーされるため、サーバーで修正する必要があるためです。 /etc/httpd/conf.d/ssl.confに移動して、仮想サーバー443に関する部分をコメントアウトします。しかし、オッズは、ホスティングプロバイダーがそれほど制御できないことです。したがって、htaccessがリダイレクトする前に警告がトリガーされないように、別のホストに移動するか、SSLを購入する必要があります。

29
Adela Ruffatti
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
8
Auero

次のルールを使用して、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/footohttp:// example。 com/foo

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

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

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

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

8
starkeen

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

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

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

3
drhema
RewriteCond %{HTTP:X-Forwarded-Proto} =https
1
Eric Michalsen

あなたのコードは正しいです。それらを<VirtualHost *:443>の中に入れるだけです

例:

<VirtualHost *:443>
  SSLEnable

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

</VirtualHost>
0
Hiro Itasiki