1. ホーム
  2. apache

[解決済み】htaccess で https://www にリダイレクトされる。

2022-03-27 09:48:05

質問

以下のような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. のサブドメインになります。 にアクセスすると http://www. (HTTPSなし)にリダイレクトされない。 https://www をHTTPSで表示します。

解決方法は?

最初に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 で接続しているような、いくつかの形式のプロキシの背後にいる場合、そのプロキシは %{HTTPS} 変数は決して on となり、書き換えのループが発生します。これは、クライアントとプロキシ/ロードバランサーがHTTPSを使用しているにもかかわらず、アプリケーションが実際にはプレーンなHTTPトラフィックを受信しているためです。このような場合は X-Forwarded-Proto ヘッダーの代わりに %{HTTPS} 変数を使用します。 この回答は適切な処理を示しています