次の 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
ベストアンサー1
最初に 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}
。この回答は適切なプロセスを示しています