2006-10-21 (土)
■ TextDrive でサブドメイン
先日借りた TextDrive をあれこれ触っている。 まず、サブドメインの使い方を覚えよう。
やりたいこと
www.example.com と diary.example.com で違うサイトを表示したい。
現状
デフォルトでは、全てのサブドメイン (*.example.com) で同じコンテンツが表示される。 Apache の設定ファイルは、以下のようになってる。
ServerName example.com ServerAlias www.example.com *.example.com
基本
まず、 TextDrive Help Desk - 6.4. Creating Virtual Subdomains を読む。
Virtual subdomains are easy to create. Any folder in your /web/public or /public_html directory (i.e., /users/home/username/web/public/folder/ or /users/home/username/public_html/folder/) is automatically available at http://folder.yourdomain.tld/
なるほど。 diary.example.com だけを分けたい場合は、以下のようにすればいいのか。
web/public/ ← www.example.com のコンテンツを置く web/public/diary/ ← diary.example.com のコンテンツを置く
ただし、サブドメインのドキュメントルートがメインドメインのドキュメントルートの下にあるので、
http://www.example.com/diary/
にアクセスすると
http://diary.example.com/
と同じ内容のコンテンツが表示されてしまう。
TextDrive Help Desk - 6.5. Making a Subdomain independentを読むと、サブドメインをフルドメインと同じように扱いたい場合は、別ドメインとして管理してねって書いてある。 この場合、ドキュメントは以下のようになる。
web/public/ ← www.example.com のコンテンツを置く domeins/diary.example.com/web/public/ ← diary.example.com のコンテンツを置く
ちなみに、管理できるドメイン数には制限があって、Shared1プランの場合は5個までとなっている。 (サブドメインとして扱う場合は上限は無さそう)
■ TextDrive でサブドメイン (2)
ドメイン数を消費するのは嫌なので、簡易サブドメイン機能を使うことにする。 サンプル的に、以下のようにファイルを置く。
web/public/index.html web/public/diary/diary.html
これで http://diary.example.com/ にアクセスすると……なぜか index.html が見えてしまうよ! サブドメイン機能が有効になっていない…としばらく悩んだあげく、 http://diary.example.com/diary.html にアクセスすると diary.html の中身が見えることに気づく。
もしかして、サブドメイン側にファイルが無かった場合は、メインドメイン側のファイルを見ている? 実験してみることにした。
ファイルの配置
以下の4つのファイルを配置する。 test2.html はメインドメイン側とサブドメイン側で中身を変えている。
web/public/test1.html web/public/test2.html web/public/diary/test2.html web/public/diary/test3.html
実験結果
アクセス先と表示結果はこのようになった。
| No | アクセス先 | 表示結果 |
| 1 | http://www.example.com/test1.html | web/public/test1.html |
| 2 | http://www.example.com/test2.html | web/public/test2.html |
| 3 | http://www.example.com/test3.html | 300 Multiple Choices |
| 4 | http://diary.example.com/test1.html | web/public/test1.html |
| 5 | http://diary.example.com/test2.html | web/public/diary/test2.html |
| 6 | http://diary.example.com/test3.html | web/public/diary/test3.html |
やっぱり、サブドメイン → メインドメインの順でファイルを見ているのか。 予想外だったのは 3 番。 てっきり 404 Not Found が表示されると思っていたら、 300 Multiple Choices が表示された。 test3.html は無いけど、 test1.html と test2.html ならあるよという、そんな感じ。
■ TextDrive でサブドメイン (3) - サブドメインと ServerName
http://diary.example.com/ に tDiary を入れてみたけど、はてなブックマークカウンタープラグインがうまく動かない。 自分の URL を http://diary.example.com/ じゃなくて、 http://example.com/ と認識している。
phpinfo を動かして環境変数を調べてみたところ、どうも ServerName が原因みたい。
HTTP_HOST diary.example.com SERVER_NAME example.com
例のごとく、 TextDrive のヘルプを見てみる。 12.7. My subdomain shows or redirects to my main domainにヒントが書いてあった。
Subdomain gets redirected to main domain automatically.
http://subdomain.example.com/subdir にアクセスすると、 http://example.com/sub/ にリダイレクトされるよ、という内容。 Apache が自身のサーバ名を知るときに ServerName を参照しているのが原因だと。 たしかに、 Apache の設定ファイルは以下のようになっている。
ServerName example.com
Webmin を使って UseCanonicalName を無効 (off) にするといいよ、と書かれていたので、手順どおりに「Use hostname supplied by browser (ブラウザから送られたホスト名を使う)」にチェックを入れる。 再度、 phpinfo で環境変数を調べると、以下のようになっていた。
HTTP_HOST diary.example.com SERVER_NAME diary.example.com
これでプラグインも正しく動いたし、一件落着。 ちなみに、「ブラウザから送られたホスト名」とは、 HTTP リクエストの HOST ヘッダのこと。