web-dev-qa-db-ja.com

htaccessと301リダイレクト-複数のドメイン

mydomain1.co.ukmydomain1.comwww.mydomain1.comに完全にリダイレクトする次のものがあります。

RewriteCond %{HTTP_Host} !^(.*)\.mydomain1\.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain1.com/$1 [R=301,L]

2番目のドメインにmydomain2.comのすべてのwww以外のトラフィックをwww.mydomain2.comにリダイレクトするルールを追加しようとしています。

ありがとう!

2
drs

同じフォルダを指すドメインとサブドメインがかなりあるようで(同じ.htaccessを共有するため)、元のアプローチはこのような状況には適していません。あなたのルールの代わりにこれらのルールを使用してください:

RewriteCond %{HTTP_Host} =mydomain1.co.uk [OR]
RewriteCond %{HTTP_Host} =mydomain1.com
RewriteRule ^(.*)$ http://www.mydomain1.com/$1 [R=301,L]

RewriteCond %{HTTP_Host} =mydomain2.com
RewriteRule ^(.*)$ http://www.mydomain2.com/$1 [R=301,L]

これらのルールは、質問で説明されているドメイン/サブドメインでのみ機能し、他のサブドメインをキャッチしません(例:hello.mydomain1.comはこれらのルールをトリガーしません)。

3
LazyOne

別の方法は、ホスト名mydomain1を確認し、www.mydomain1.com(正規のホスト名)ではなく、正規のホスト名。

例えば:

RewriteCond %{HTTP_Host} mydomain1 [NC]
RewriteCond %{HTTP_Host} !^www\.mydomain1\.com$
RewriteRule (.*) http://www.mydomain1.com/$1 [R=301,L]

これは、mydomain1mydomain1の一部としてmydomain2が合法的に発生できなかった場合)とドットで終わるFQDNのさまざまなバリエーションを処理します。次に、mydomain2について繰り返します。

両方のドメインが同じ標準ホスト名形式(つまり、例のようにwww.example.com)を持っている場合、これら2つ(またはそれ以上)のルールを1つに組み合わせることができます。

RewriteCond %{HTTP_Host} (mydomain1|mydomain2) [NC]
RewriteCond %1@@%{HTTP_Host} !^([a-zA-Z]+)@@www\.\1\.com$
RewriteRule (.*) http://www.%1.com/$1 [R=301,L]

2番目のCondPattern\1は、最初の条件で一致したドメイン名への内部後方参照です。 %1は最後の後方参照ですmatchedCondPattern(つまり、最初のドメイン名CondPattern)。 2番目のconditionは、negatedパターンであるため、「一致」することはありません。 。

0
MrWhite