QA@IT

ブログサービスなどの、http://ユーザID.example.comが割り当てられるようなシステム

2970 PV

こんにちは。
最近ここで質問をさせて頂くようになり、いままで分からなかったことが少しずつ分かるようになってきており本当に感謝しております。
今回の質問は、題名にあるようにブログサービスなどで、会員登録後に、http://ユーザID.example.com
のように、自分のブログページが割り当てられるシステムがあると思います。
現在、cakephpでそのようなシステムを開発しているのですが、ユーザが登録するごとに、cakephpのディレクトリをhttp://ユーザID.example.com/以下に生成していくような必要があるのでしょうか?

例としましては、
ユーザID dragon
ユーザページ http://dragon.example.com
という場合、私の考えうる方法では、http://dragon.example.com/cake のような構造でcakeディレクトリをコピーまたは生成し、システム自体をそこに新しく持って行くというやり方くらいしか思いつきません。この場合、システムというのは、ブログサービスでいう、そのユーザーだけがアクセスできる管理画面やブログページそのもの全部含みます。
しかし、これではユーザーがかなり膨大な数になってきたときに非効率すぎるのではないか?とも思います。

こういったシステムをcakephpで開発する場合、どのような技術を用いるのが一般的なのでしょうか?
もし、ご存知の方がいらっしゃればご教授いただけると幸いです。
文章が拙いことで表現が不正確なところもあるかもしれませんが、よろしくお願い致します。

  • http://qa.atmarkit.co.jp/q/3999 ← こちらの回答にある通りだと思いますが -
  • ngyuki様、いつもありがとうございます。
    例えば、1つのサーバーで複数のサブドメインをユーザー毎に扱いたい場合は、
    http://ユーザ名.example.com にアクセスされた場合、ワイルドカードの設定によって、すべて http://example.com に飛ばし、サブドメインのホスト名からユーザの情報を判別してページを表示する。というような理解であっていますでしょうか?
    -
  • 何度もすみませんが、よろしくお願い致します。 -
  • そうです。http://qa.atmarkit.co.jp/q/3999 にあるように mod_rewrite を使ったり(CakePHP では多分それが主流)、$_SERVER['HTTP_HOST'] で処理を振り分けたり(他のフレームワークではホスト名でルーティングできるものもある)です。 -

回答

ユーザが登録するごとに、cakephpのディレクトリをhttp://ユーザID.example.com/以下に生成していくような必要があるのでしょうか?

そのような必要はありません。

普通は http://*.example.com/ のような URL が同じドキュメントルートになるように設定します。

Apache なら、ネームベースバーチャルホストを使わないようにするか、バーチャルホストディレクティブで ServerAlias *.example.com のようにします。

<VirtualHost *:80>
  ServerName www.example.com:80
  ServerAlias *.example.com
  DocumentRoot /var/www/html
   :
</VirtualHost>

あとは、http://qa.atmarkit.co.jp/q/3999 の回答にあるように、mod_rewrite でドメインのサブドメイン部分をクエリストリングに書き換えたり(CakePHP ではこの方法が主流?)、あるいは、他のフレームワークなら $_SERVER['HTTP_HOST'] を元にルーティングする機能を持つものもあります(例えば http://framework.zend.com/manual/2.0/en/modules/zend.mvc.routing.html#zend-mvc-router-http-hostname )。

編集 履歴 (0)
  • ngyuki様、ご丁寧にありがとうございました。
    かなり理解が深まり開発も良い方向に進みそうです。
    これからも初歩的な質問をさせて頂くことがあるかもしれませんが、よろしくお願い致します。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。