web-dev-qa-db-ja.com

.comを.co.ukに、httpをhttpsに、非wwwをwwwサブドメインにリダイレクトするhtaccess 301

example.co.ukおよびexample.comドメイン名があります。メインのWebサイトはexample.co.ukです。ドメインexample.co.ukにSSL証明書があります。

.htaccessファイルを使用して、ブラウザで表示されるすべてをSEOに影響を与えずにhttps:に301リダイレクトします。

これは、次のエントリを意味します。

  • example.co.uk
  • example.com
  • www.example.com
  • www.example.co.uk
  • http://example.co.uk
  • http://example.com
  • http://www.example.co.uk
  • http://www.example.com
  • https://example.co.uk
  • https://example.com
  • https://www.example.com

すべてhttps://www.example.co.ukに転送します。

これは単一ページのサイトなので、「キャッチオール」タイプのソリューションが機能します。理想的には、これが複数ページのサイトで機能することを望みます。したがって、別のプロジェクトで.htaccessコードを再度使用できます。

私は次のことを思いつきましたが、.comエントリをhttps://example.comまたはhttps://www.example.comに変換してから停止します。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R]

RewriteCond %{HTTP_Host} ^(www\.)?example\.com$ [NC,OR]
RewriteCond %{HTTP_Host} ^example\.co.uk$ [NC]
RewriteRule ^ https://www.example.co.uk%{REQUEST_URI} [L,NE,R]
3
coldstatetech

ドメインexample.co.ukにSSL証明書があります。

おそらくこれはwwwサブドメインもカバーしていますか? (必要になるでしょう。)

https://example.com
https://www.example.com

Simonがコメントで述べたように、https://example.comをリダイレクトするには、example.comドメインをカバーするSSL証明書が必要です。そうでない場合、ブラウザは無効な証明書の警告で停止します。 (SSLハンドシェイクが発生しますbeforeサーバーはリクエストを処理できます。)

私は次のことを思いつきましたが、.comエントリをhttps://example.comまたはhttps://www.example.comに変換してから停止します。

おそらく無効な証明書の警告を受け取っているからでしょうか?

複数のドメインがあるため、可能性のあるものすべてを積極的に一致させるよりも、正規のホストであるnotをリダイレクトするルールを作成する方が簡単です。例えば:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !=www.example.co.uk
RewriteRule ^ https://www.example.co.uk%{REQUEST_URI} [R,L]

これは、HTTPSとwwwの正規化の両方を単一のルールに結合します。

CondPattern!プレフィックスは式を否定するため、指定された文字列/正規表現と一致しない場合に成功します。この場合、Hostが文字列www.example.co.ukではない場合に成功します。 =プレフィックスは完全一致(辞書編集比較)演算子であるため、残りのCondPatternは正規表現ではなく通常の文字列と見なされます。

NEnoescape)フラグが必要ですか?最初のルールでこれを省略したため、とにかくこのディレクティブを通過した特殊文字は当然失われます。


RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R]

RewriteCond %{HTTP_Host} ^(www\.)?example\.com$ [NC,OR]
RewriteCond %{HTTP_Host} ^example\.co.uk$ [NC]
RewriteRule ^ https://www.example.co.uk%{REQUEST_URI} [L,NE,R]

脇:HTTP_Hostを使用しているのでsubstitutionで最初のRewriteRuleで、これらのルールの順序を変更した場合は避けますhttp://example.co.ukなどにアクセスするときの不必要な2番目のリダイレクト.

1
MrWhite