私はexample.tld
を所有しています。root-domain
とそのすべてのsubdomains
に対してSSLとhttpsを強制します。
ルートドメインの.htaccess
ファイルで以下のコードを使用しました。
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\.example\.tld$ [NC]
RewriteRule ^(.*)$ https://www.example.tld/$1 [L,R=301]
ルートドメインでは完全に機能するように見えます。
しかし、blog.example.tld
などのサブドメインでは、次のようなさまざまな提案を使用しました。
RewriteCond %{HTTP_Host} ^blog\.example.\tld$ [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L,NE]
しかし、それらはどれも正しく動作せず、subdomain
のssl wwwバージョンではなく、root-domain
のssl wwwバージョンにリダイレクトします。
私は何をすべきか?
最後に、問題を発見しました。
問題はホストの設定が原因でした。
いくつかの問題のため、ホストでサブドメインをindependent domain
として定義する必要がありました。これにより、Redirects
に問題が発生しました。サブドメインではなく、メインドメインがRedirection commands
に応答していたためです。
この問題を解決するために、サブドメインを別のホストに移したため、サブドメインを含む新しいホストからサブドメインのRedirection commands
が返信されました。
この新しい状況では、次の単純なコマンドによりssl and www for subdomain
が強制されます。
RewriteEngine On
RewriteCond %{HTTP_Host} !^www\.sub.example\.tld$ [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
この経験が他の人にも役立つことを願っています。
しかし、それらはどれも正しく動作せず、サブドメインのssl wwwバージョンではなく、rootドメインのssl wwwバージョンにリダイレクトします。
(すべてのサブドメインがファイルシステムの同じ領域にマップされると仮定しています。)
ディレクティブの順序が間違っている可能性があります。ルートドメインリダイレクトの後にサブドメインリダイレクトを配置した場合、それは処理されず、ルートドメインリダイレクトはすべてのサブドメインリクエストをキャッチし、リダイレクトしますRewriteCond
ディレクティブは、要求されたドメインがnotwww.example.tld
かどうかをチェックしているため、ルートドメインに戻るサブドメインサブドメイン。
ただし、(subdomainsでも)wwwサブドメインを常に強制する場合は、ディレクティブを単一のルールに「単純化」できます。 。例えば:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteCond %{HTTP_Host} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]
これは、HTTPまたはがwww.
を開始せず、HTTPSにリダイレクトし、www
サブドメインのプレフィックス(必要な場合)である要求に一致します。 3番目のRewriteCond
ディレクティブは、www.
プレフィックス(存在する場合)を除いて、要求されたホスト名をキャプチャするために必要です。 substitutionの%1
は、www.
プレフィックスを除いたホスト名への後方参照です。
これは当然、アカウント上のallドメインに影響します(複数ある場合)。
PDATE:ちょうどあなたの答えを見たので、これが今関連するかどうかわかりませんか?