324

私は次のhtaccessコードを持っています:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>

https://www.サイトをHTTPSでリダイレクトし、サブドメインを適用したいのですwww.が、(HTTPSなしで)アクセスすると、HTTPSでhttp://www.リダイレクトされませんhttps://www

4

14 に答える 14

658

最初にHTTPSを強制するには、正しい環境変数を確認する必要があります%{HTTPS} offが、上記のルールはwww.、強制する2番目のルールがあるためwww.、最初のルールでは使用しないでください。

RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

プロキシについて

クライアントがHTTPSを介してプロキシ、ロードバランサー、Passengerアプリケーションなどに接続している、ある形式のプロキシの背後にある場合、%{HTTPS}変数が存在しない可能性がonあり、書き換えループが発生する可能性があります。これは、クライアントとプロキシ/ロードバランサーがHTTPSを使用している場合でも、アプリケーションが実際にプレーンHTTPトラフィックを受信して​​いるためです。このような場合は、変数X-Forwarded-Protoの代わりにヘッダーを確認してください。この回答は適切なプロセスを示しています%{HTTPS}

于 2012-12-21T21:34:26.717 に答える
155

Michalsの回答は、1つの小さな変更はありましたが、私にとってはうまくいきました。

問題:

単一のサイトセキュリティ証明書がある場合、https://wwwなしでページにアクセスしようとするブラウザ。(または証明書がカバーするドメイン)は、安全で正しいhttpsページへのリダイレクトを受信する前に、醜い赤い警告画面を表示します。

解決

最初にwww(または証明書でカバーされているドメイン)へのリダイレクトを使用してから、httpsリダイレクトを実行します。これにより、ブラウザに現在のURLをカバーしていない証明書が表示されるため、ユーザーがエラーに直面することがなくなります。

#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
于 2013-10-22T05:48:52.543 に答える
101

CloudFlareまたは同様のCDNを使用している場合、ここで提供される%{HTTPS}ソリューションで無限ループエラーが発生します。CloudFlareユーザーの場合は、次を使用する必要があります。

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
于 2014-11-13T23:30:44.643 に答える
63

悪い解決策とその理由!

次のようなコードを使用している場合は、以下のソリューションを使用しないでください。

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]

ブラウザは次の場所に移動します。

http://example.com

次に、次の場所にリダイレクトします。

https://example.com

次に、次の場所にリダイレクトします。

https://www.example.com

これはサーバーへの要求が多すぎます。

受け入れられた答えのほとんどは、この問題を抱えています。


最善の解決策と答え

このコードには、[OR]URLでの二重変更を防ぐための条件があります。

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]
于 2017-03-27T17:22:53.813 に答える
39

これは、プロキシユーザーではなくプロキシユーザーにとって最良の方法です。

RewriteEngine On

### START WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### END WWW & HTTPS
于 2016-09-09T16:09:30.157 に答える
28

そこにはたくさんの解決策があります。これは、この問題を直接扱っているapachewikiへのリンクです。

http://wiki.apache.org/httpd/RewriteHTTPToHTTPS

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
于 2014-05-23T07:47:33.943 に答える
12

http://またはhttps://https:// wwwにリダイレクトするには、apacheのすべてのバージョンで次のルールを使用できます。

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

Apache 2.4

RewriteEngine on

RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

%{ REQUEST_SCHEME }変数は、apache2.4以降で使用できることに注意してください。

于 2016-04-27T03:40:16.220 に答える
8

CloudFlareを使用している場合は、必ずこのようなものを使用してください。

# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect

これにより、リダイレクトループから解放され、サイトをSSLに安全にリダイレクトされます。

PS mod_rewrite.cをチェックするかどうかを確認することをお勧めします!

于 2016-07-10T04:52:41.607 に答える
4
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
于 2018-12-14T14:05:38.513 に答える
2
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

注:次の手順を実行したことを確認してください

  1. sudo a2enmod rewrite
  2. sudo service apache2 restart
  3. /etc/apache2/sites-available/000-default.confにあるvhostファイルにFollowingを追加します
<Directory /var/www/html>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  Require all granted
</Directory>

これで、.htaccessが機能し、サイトがhttp://からhttps://wwwにリダイレクトされます。

于 2018-09-07T21:41:13.750 に答える
1

Amir Forsatiのソリューションhtaccessはhttps:// wwwにリダイレクトしますが、可変ドメイン名の場合は、次のことをお勧めします。

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%2%{REQUEST_URI} [R=301,L]
于 2019-09-27T08:22:25.853 に答える
0

.htaccessファイルに設定する

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
于 2017-07-25T14:17:22.500 に答える
0

私はこのウェブサイトから以下のコードを使用しました、それは素晴らしい働きをしますhttps://www.freecodecamp.org/news/how-to-redirect-http-to-https-using-htaccess/

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

それが役に立てば幸い

于 2020-05-19T13:14:02.077 に答える
-1

私は最初の答えを試しましたが、うまくいきません...この作品:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
于 2018-08-30T14:45:25.407 に答える