これは、DNS を使用するだけでは実現できません。*.foo.bizの CNAME レコードを foo.org に設定することはできますが、ユーザーがブラウザのアドレス バーにfoo.bizと入力したときに、ブラウザがfoo.orgを要求することはありません。これを実現するには、HTTP サーバー レベルでリダイレクトを使用する必要があります。
なんで?
明確にするために、stackoverflow.com の DNS 設定を見てみましょう。
~# dig www.stackoverflow.com
;; QUESTION SECTION:
;www.stackoverflow.com. IN A
;; ANSWER SECTION:
www.stackoverflow.com. 300 IN CNAME stackoverflow.com
stackoverflow.com. 24 IN A 192.252.206.16
ご覧のとおり、stackoverflow.com は www.stackoverflow.com の正規名です。それでも、ブラウザのアドレス バーにwww.stackoverflow.comと入力すると、次のリクエストが 192.252.206.16 に送信されます。
GET / HTTP/1.1
Host: www.stackoverflow.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
ここで興味深いのは、Chrome が StackOverflow の DNS 構成を調べて、stackoverflow.comがそのサーバーの正規名であることを確認した可能性があることですが、ヘッダー フィールドでwww.stackoverflow.comを送信したままです。Host
これにより、管理者は 1 台の物理マシンで複数のサイトをホストできます (名前ベースの仮想ホスティング)。
ただし、192.252.206.16 のサーバーは私の要求に応答します。
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: http://stackoverflow.com/
Date: Mon, 16 Sep 2013 11:00:43 GMT
Content-Length: 148
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://stackoverflow.com/">here</a></body>
したがって、私をstackoverflow.comにリダイレクトします。
HTTP サーバーの構成
マッピングを実現するには、HTTP サーバー構成にいくつかの書き換えルールを追加する必要があります。Apache の場合、これは次のようになります。
<VirtualHost *:80>
ServerName foo.biz
ServerAlias *.foo.biz
RewriteEngine On
RewriteCond %{HTTP_HOST} =foo.biz
RewriteRule ^(.*)$ http://foo.org$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^(.*).foo.biz$
RewriteRule ^(.*)$ http://%1.foo.org$1 [L,R=301]
</VirtualHost>
これにより、 foo.biz/bar が foo.org/barに、 anything.foo.biz / something がanything.foo.org/somethingに書き換えられます。ただし、foo.biz の DNS エントリと foo.org サイトのサイト構成は引き続き必要です。
それが役立つことを願っています...