web-dev-qa-db-ja.com

独立したドメインとしてサブドメインのsslとwwwを強制する方法は?

私は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バージョンにリダイレクトします。
私は何をすべきか?

4
Pasakgroup

最後に、問題を発見しました。
問題はホストの設定が原因でした。

いくつかの問題のため、ホストでサブドメインを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]

この経験が他の人にも役立つことを願っています。

3
Pasakgroup

しかし、それらはどれも正しく動作せず、サブドメインの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:ちょうどあなたの答えを見たので、これが今関連するかどうかわかりませんか?

3
MrWhite