サブドメインを保持しながら、htaccess、mod_rewrite を介して 2 番目のドメインを最初のドメインに 301 リダイレクトする - 何かヒントはありますか?

サブドメインを保持しながら、htaccess、mod_rewrite を介して 2 番目のドメインを最初のドメインに 301 リダイレクトする - 何かヒントはありますか?

今日はチューブを漁っていましたが、mod_rewrite と正規表現の知識が限られているため、苦労しています。

私が実現しようとしているのは、ドメイン 1 (サブドメインを含む) をドメイン 2 (サブドメインを含む) に書き換え、301 として実装することです。ドメイン 2 はプライマリ ドメインで、ドメイン 1 は (当面は) 単に横にセットアップされており、実際には「そこにある」というだけのことです (より適切な使用法は保留中ですが、その間に何かを学ぶために使用しようと思いました)。

ドメイン 2 はワイルドカードとして構成されており、サブドメイン -> サブフォルダーの内部書き換えによって表示されるマイクロサイトをホストします。(リクエストに応じて喜んでこのコードを投稿します。難しいことではありませんが、何らかの奇妙な理由で、無限の書き換えなしで動作させるのにしばらく時間がかかりました)。ドメイン 1 (一時ドメイン) はまったく設定されていませんが、それはいくつかのオプション (DirectAdmin で実装された「エイリアス」または「ポインター」、または別のドメインとして追加され、ワイルドカードとして構成されている) に直面しているためです。誰かがドメイン 1 (転送ドメイン) にアクセスすると、次のようになります。

http://sub.domain1.tld -> http://sub.domain2.tld
http://sub.domain1.tld/content.php -> http://sub.domain2.tld/content.php
http://domain1.tld -> http://domain2.tld
http://domain2.tld

私を悩ませているのは、Web 上ですぐに利用できるソリューションのすべてが、サブドメインをディレクトリにマップするか、 経由のリクエストに対応するようにのみコード化されていることです。.co.uk をhttp://domain1.tld/.com にリダイレクトするための私の古い htaccess の 1 つに、私が目指すところの始まりがあります。

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.foo\.com [NC] 
RewriteRule ^(.*)$ http://foo.co.uk/$1 [R=301,L]

$1これは、パターンに一致するドメインの後のすべてを示し^(.*)$、サブドメインになることを理解しています%2(したがって、http_referer に存在する場合は「www.」、そうでない場合は null になると思います%1)。

...しかし、ここで行き詰まってしまいます。変数を新しいドメイン名に引き継ぎ、途中でサブドメインを失わずに書き直す最も良い方法は何でしょうか?

答え1

理由はあるのでしょうかリダイレクト動作しません。domain1 の設定では:

Redirect permanent / http://domain2.com/

Redirect同じディレクトリ構造を維持しながら、LHS の下にあるすべてを RHS にリダイレクトします。

あるいは、さらに簡単な解決策は、domain1 の設定を追加することですServerAlias domain2。ただし、リダイレクトは送信されず、サーバーが domain1 と同じように domain2 のリクエストに応答するだけです。

答え2

次のようなことを試してみてください (未テスト):

RewriteMatch 301 http://(.*)domain1.com(.*) http://$1domain2.com$2

答え3

次のようなものが欲しいと思います:

RewriteCond %{HTTP_HOST} ^((www\.)?[^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

これにより、%1 (foo.com のサブドメイン部分、存在する場合は www を含む) が保持され、 の RHS に配置されます。これらは、 がマングルしている間は単なる文字列であるため、何でもできることにRewriteRule留意してください。mod_rewrite

オプションの www 部分に問題がある場合は、それを 2 つのRewriteCondステートメントに分割します。

RewriteCond %{HTTP_HOST} ^(www\.[^\.]+)\.foo\.com [NC] [OR]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

関連情報