1265573185 CakePHPをサブドメインで運用したいと思っています。

(www.exsample.comならaaa.exsample.comで)

通常でのインストールはうまくいったのですが、サブドメインの
運用についてはググッても良い情報が見つからず困っています。

============================================================

▼現在の状態

home/xxxxx/public_html/(※app/webroot内のファイル)
home/xxxxx/public_html/aaa/←ここに設置したい
home/xxxxx/.data/app
home/xxxxx/.data/cake

※参考書にpublic_html以下に「app」「cake」などのファイルを置くのは望ましくない
とあったのでこのような構成になっています。
※サブドメインを設定していないときにaaaに設置すれば
 正常に見ることは出来ますが、サブドメインの設定をすると
 見れなくなります。

============================================================

具体的にどのファイルをどのように変更すればよいのでしょうか。
ご教授のほど宜しくお願い致します。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:
  • 終了:2010/02/12 14:24:26
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント100pt

お言葉に甘えて回答させていただきます。

「.htaccess」に以下の記述を追加しなくても、サブドメインの設定後、しばらく時間が経ったら動作するようになったのでしょうか?

DirectoryIndex index.php

標準でindex.htmlだけでなく、index.phpもトップページとして認識する設定になっていたのですね。


> http://www.example.com/aaa/ では見れるのですが

> http://aaa.example.com を参照しようとすると

>「http://aaa.example.com/cgi-sys/defaultwebpage.cgi」に

>「Great Success ! Apache is working on your cPanel® and WHM™ Server」というApacheの画面が表示されます。

この時点では、まだ反映されていなかったのかもしれません。

通常のファイルが表示できたという点が不思議ですが・・・

トップページが見つからなかった場合、任意のページを表示するように、以下のような設定をしているのではないかと思います。

<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 http://aaa.example.com/cgi-sys/defaultwebpage.cgi
</LocationMatch>

上記のような設定がしてある場合、アクセス権がない状態でHPにアクセスすると、トップページだけサーバー側で指定しているページが表示されるという問題があります。

※その他のページは、ユーザーが指定したページが表示されます。

もし、アクセス制限等が原因でこの問題が発生した時には、サポートに相談してみてください。

http://q.hatena.ne.jp/1264561495


> app/config/routes.php で Router::connect ('/aaa/', array('controller'=>'posts', 'action'=>'index'));

> などと指定すると

> Missing Controller

> Error: Controller could not be found.

> Error: Create the class Controller below in file: app/controllers/controller.php

> といったエラーが表示される状態です。

おそらくこの時点では、CakePHPは正常に動作しています。(^-^;

『Error: PostsController could not be found.

Error: Create the class PostsController below in file: app/controllers/posts_controller.php』

正確なエラーメッセージは、上記のように表示されなかったでしょうか?

「routes.php」で指定したPostsControllerが見つからないのが原因です。

PostsControllerは作成済みでしょうか?

※PostsControllerを利用しない(「http://aaa.example.com/posts」や「http://aaa.example.com/posts/~」というページが必要ない)場合は、作成する必要はありません。

※「http://aaa.example.com/aaa」でPostsControllerにアクセスしない場合は、「routes.php」での指定も必要ありません。

試しに、「routes.php」に作成していないコントローラーを同じように指定してみてください。

上記のようなエラーが表示されるはずです。


ともかく、無事に動作するようになったということで、本当に良かったです。

id:gelgelgel

細かな解説ありがとうございます。

>この時点では、まだ反映されていなかったのかもしれません。

>通常のファイルが表示できたという点が不思議ですが・・・

もしかしたら私の記憶違いだったのかも知れません・・

いろいろいじっていたもので・・

>『Error: PostsController could not be found.

>Error: Create the class PostsController below in file: app/controllers/posts_controller.php』

>正確なエラーメッセージは、上記のように表示されなかったでしょうか?

これはコピペしたので私のであっていると思います。私もなんで「/controller.php」なんだろうと

疑問に思っていましたので・・。CakePHPはまださわり始めたばかりなのでこれから精進していきたいと思います。

様々なご指導ありがとうございました。

2010/02/09 03:02:11

その他の回答1件)

id:km1967 No.1

回答回数541ベストアンサー獲得回数40

ポイント20pt

home/xxxxx/public_html/aaa/

の下に app/webroot内のファイルをすべて置かないと動きませんよ

http://cakephp.jp/

id:gelgelgel

km1967さん

ご回答ありがとうございます。

私の文章がわかりにくかったのかも知れませんが、

ファイルはすべて移動しております。

またこの問題については解決することが出来ました。

ありがとうございました。

2010/02/08 16:14:00
id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント100pt

お言葉に甘えて回答させていただきます。

「.htaccess」に以下の記述を追加しなくても、サブドメインの設定後、しばらく時間が経ったら動作するようになったのでしょうか?

DirectoryIndex index.php

標準でindex.htmlだけでなく、index.phpもトップページとして認識する設定になっていたのですね。


> http://www.example.com/aaa/ では見れるのですが

> http://aaa.example.com を参照しようとすると

>「http://aaa.example.com/cgi-sys/defaultwebpage.cgi」に

>「Great Success ! Apache is working on your cPanel® and WHM™ Server」というApacheの画面が表示されます。

この時点では、まだ反映されていなかったのかもしれません。

通常のファイルが表示できたという点が不思議ですが・・・

トップページが見つからなかった場合、任意のページを表示するように、以下のような設定をしているのではないかと思います。

<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 http://aaa.example.com/cgi-sys/defaultwebpage.cgi
</LocationMatch>

上記のような設定がしてある場合、アクセス権がない状態でHPにアクセスすると、トップページだけサーバー側で指定しているページが表示されるという問題があります。

※その他のページは、ユーザーが指定したページが表示されます。

もし、アクセス制限等が原因でこの問題が発生した時には、サポートに相談してみてください。

http://q.hatena.ne.jp/1264561495


> app/config/routes.php で Router::connect ('/aaa/', array('controller'=>'posts', 'action'=>'index'));

> などと指定すると

> Missing Controller

> Error: Controller could not be found.

> Error: Create the class Controller below in file: app/controllers/controller.php

> といったエラーが表示される状態です。

おそらくこの時点では、CakePHPは正常に動作しています。(^-^;

『Error: PostsController could not be found.

Error: Create the class PostsController below in file: app/controllers/posts_controller.php』

正確なエラーメッセージは、上記のように表示されなかったでしょうか?

「routes.php」で指定したPostsControllerが見つからないのが原因です。

PostsControllerは作成済みでしょうか?

※PostsControllerを利用しない(「http://aaa.example.com/posts」や「http://aaa.example.com/posts/~」というページが必要ない)場合は、作成する必要はありません。

※「http://aaa.example.com/aaa」でPostsControllerにアクセスしない場合は、「routes.php」での指定も必要ありません。

試しに、「routes.php」に作成していないコントローラーを同じように指定してみてください。

上記のようなエラーが表示されるはずです。


ともかく、無事に動作するようになったということで、本当に良かったです。

id:gelgelgel

細かな解説ありがとうございます。

>この時点では、まだ反映されていなかったのかもしれません。

>通常のファイルが表示できたという点が不思議ですが・・・

もしかしたら私の記憶違いだったのかも知れません・・

いろいろいじっていたもので・・

>『Error: PostsController could not be found.

>Error: Create the class PostsController below in file: app/controllers/posts_controller.php』

>正確なエラーメッセージは、上記のように表示されなかったでしょうか?

これはコピペしたので私のであっていると思います。私もなんで「/controller.php」なんだろうと

疑問に思っていましたので・・。CakePHPはまださわり始めたばかりなのでこれから精進していきたいと思います。

様々なご指導ありがとうございました。

2010/02/09 03:02:11
  • id:kn1967
    DocumentRoot を参照するので、サブドメインでは無理だと思うのだが、
    cakephp使い込んでる訳でもないので、自信がなく、コメント欄。

    http://cakephp.jp/doc/ch03s04.html
    >>引用ここから
    公開用セットアップを利用するには、サーバの DocumentRoot の変更権限を持っていなくてはなりません。
    そうすることで、ドメインすべてを、ひとつの CakePHP アプリケーションとして動かすことができます。
    <<ここまで

    開発用セットアップなら動くだろうけど、セキュリティ的に薦められないというか、
    やめろというべきだし・・・やっぱ無理じゃないかな?
    >>同上、引用ここから
    CakePHP の最初のセットアップ方法は、二つ目の方法に比べて安全ではないので、
    通常、開発環境用にのみ推奨される方法です。
    <<ここまで


  • id:rouge_2008
    サブドメイン設定前と設定後で、ディレクトリ構成は変更していないのですね?
    それでしたら、DNSが反映されていないだけではないかと思います。
    サブドメインですから反映は早いと思いますが、しばらく(数時間程度)待ってみてはいかがでしょうか?
  • id:tdoi
    確認です。

    www.example.comのドキュメントルートが、home/xxxxx/public_html/
    aaa.example.comのドキュメントルートが、home/xxxxx/public_html/aaa/

    となっているということですよね?
    その上で、www.example.comと、aaa.example.comで見せたいコンテンツは一緒ですか?
    異なる場合は、そもそもappフォルダを共有したりすると色々と面倒だと思うので、一緒だと言う仮定で話を勧めますが、一緒だとすれば、一番簡単なのは、aaa.example.comのドキュメントルートをhome/xxxxx/public_html/にしてしまうのが手軽です。
    これができないということでしょうか?
    できないという仮定で話を勧めると、kn1967さんが挙げていらっしゃるように、http://cakephp.jp/doc/ch03s04.htmlで記述されている通りに、ROOT、 APP_DIR、 CAKE_CORE_INCLUDE_PATHを適切に設定すれば十分だと思うのですが、これじゃダメなのでしょうか?

    やりたいこと、やったこと、できることをもう少し教えて頂けますか?
  • id:gelgelgel
    皆様早速ご回答ありがとうございます。

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    kn1967さん

    ↓まさしくこの「3.4. CakePHP のセットアップ」と同じ内容を見て
    配置を変更しました。
    http://cakephp.jp/doc/ch03s04.html

    「DocumentRoot /path_to_cake/app/webroot」といった設定の変更はしていません。

    ↓のようなソースがあったので出来ないことはないのだと思うのですが・・
    http://program.alphabrend.com/modules/pukiwiki/42.html

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    rouge_2008さん

    >サブドメイン設定前と設定後で、ディレクトリ構成は変更していないのですね?

    今までhome/xxxxx/public_html/にあったファイルをhome/xxxxx/public_html/aaa/に
    移動しています。

    >それでしたら、DNSが反映されていないだけではないかと思います。

    素のファイルを置くと参照できるんので反映されていないわけではないようです。

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • id:rouge_2008
    サブドメインの設定は、サーバー提供のコントロールパネルから行ったのですか?
    それでしたら、以下のような「httpd.conf」(あるいは「httpd-vhosts.conf」)の設定は必要ありませんので大丈夫です。
    <VirtualHost>
    DocumentRoot /path_to_cake/app/webroot
    ServerName aaa.example.com
    ...
    </VirtualHost>


    サブドメインの設定をしていない時に、「http://www.example.com/aaa/」では動作するんですね?
    サブドメインの設定後に「http://aaa.example.com/」で動作しないという質問だと思いますが、サブドメイン設定後の状態で「http://www.example.com/aaa/」では動作しますか?

    参考までにどちらのレンタルサーバーを使用しているかも教えていただけませんか?
  • id:gelgelgel
    tdoiさん

    >www.example.comのドキュメントルートが、home/xxxxx/public_html/
    >aaa.example.comのドキュメントルートが、home/xxxxx/public_html/aaa/
    >となっているということですよね?

    はいその通りです。

    >その上で、www.example.comと、aaa.example.comで見せたいコンテンツは一緒ですか?

    見せたいコンテンツは違います。他にもbbb.example.comやccc.example.comといった
    サイトも制作したいためです。

    >異なる場合は、そもそもappフォルダを共有したりすると色々と面倒だと思うので、一緒だと言う仮定で話を勧めますが、
    >一緒だとすれば、一番簡単なのは、aaa.example.comのドキュメントルートをhome/xxxxx/public_html/にしてしまうのが手軽です。
    >これができないということでしょうか?

    上記のような理由からhome/xxxxx/public_html/aaa/をドキュメントルートに設定したいです。

    >できないという仮定で話を勧めると、kn1967さんが挙げていらっしゃるように、http://cakephp.jp/doc/ch03s04.htmlで記述されている通りに、ROOT、 APP_DIR、 >CAKE_CORE_INCLUDE_PATHを適切に設定すれば十分だと思うのですが、これじゃダメなのでしょうか?
    >やりたいこと、やったこと、できることをもう少し教えて頂けますか?

    やりたい事は重複しますが、aaa.example.comやbbb.example.comといったサブドメインで
    CakePHPを利用したい。appフォルダは共有出来なくても問題ありません。
    (同じような仕組みのサイトになるので共有できるのが一番ですが)

    やったことはコントロールパネルからサブドメインを設定し、できた「aaa」フォルダに「public_html」以下の
    ファイルを移動しました。再度確認したところ

    http://www.example.com/aaa/ では見れるのですが
    http://aaa.example.com を参照しようとすると「http://aaa.example.com/cgi-sys/defaultwebpage.cgi」に
    「Great Success ! Apache is working on your cPanel® and WHM™ Server」というApacheの画面が表示されます。

    app/config/routes.php で Router::connect ('/aaa/', array('controller'=>'posts', 'action'=>'index'));
    などと指定すると

    Missing Controller
    Error: Controller could not be found.
    Error: Create the class Controller below in file: app/controllers/controller.php

    といったエラーが表示される状態です。

    ご教授のほど宜しくお願い致します。
  • id:gelgelgel
    rouge_2008さん

    ご回答ありがとうございます。

    >サブドメインの設定をしていない時に、「http://www.example.com/aaa/」では動作するんですね?
    >サブドメインの設定後に「http://aaa.example.com/」で動作しないという質問だと思いますが、
    >サブドメイン設定後の状態で「http://www.example.com/aaa/」では動作しますか?

    前述の通りサブドメインの設定の有無に関わらず、「http://www.example.com/aaa/」では動作致します。
    その時の「http://aaa.example.com/」を参照した時の状態についても前述のとおりです。

    >参考までにどちらのレンタルサーバーを使用しているかも教えていただけませんか?

    マイナーだと思うのですが↓以下のレンタルサーバーです。
    http://www.joeswebhosting.net/
    http://www.joeswebhosting.net/service/share/function.php(←高速セキュリティプラン)
  • id:rouge_2008
    「http://aaa.example.com/index.php」にアクセスした場合はどうなりますか?
    問題なく表示された場合は、webrootの中の「.htaccess」に以下のように記述してみてください。

    DirectoryIndex index.php

    トップページ(index.html)がない場合に、以前は一覧が表示されていたようですが、Welcomeページを表示する仕様に変更になったのかもしれませんね。
    上記の記述で、index.phpをトップページとして認識させる事ができます。
    http://www.joeswebhosting.net/support/faq/index-of.php
  • id:gelgelgel
    rouge_2008さん

    コメントありがとうございます。
    結果的にはできました!!原因は大変恥ずかしいですがrouge_2008さんの言うとおり
    DNSが反映されていなかったのかと思います。

    前述の通り変更し、数時間経って参照したところ正常に見ることが出来ました。
    大変お手数おかけいたしました。

    参考元のサイトまでお調べいただき感謝致します。
    是非いるか賞を差し上げたいと思いますので何か適当にご回答ください。

    ありがとうございました。
  • id:rouge_2008
    遅くなってすみません。
    何を書こうか迷ったのですが、お言葉に甘えて回答させていただきました。
    以前もあったので、これで2度目です・・・
    こちらこそありがとうございました。

  • id:rouge_2008
    分かった事がありますので補足します。

    > これはコピペしたので私のであっていると思います。
    > 私もなんで「/controller.php」なんだろうと
    > 疑問に思っていましたので・・。

    こちらでも以下のエラーを再現できました。
    『Error: Controller could not be found.
    Error: Create the class Controller below in file: cakeapp/controllers/controller.php』
    「routes.php」でコントローラーの指定部分を「'controller' => ''」のように空白にした時に発生しました。
    「routes.php」を変更していたそうですが、意図した通りに変更されていなかったのかもしれませんね。


    蛇足ですが、appフォルダはサイトごとに分けた方が管理しやすいのではないかと思います。
    「home/xxxxx/.data/」以下に「aaa_app」や「bbb_app」を用意して、各webrootのindex.phpで、そのサイト用の「APP_DIR」を指定してはいかがでしょうか?
    現状で十分間に合っているのでしたら、無理に変更する必要はないと思いますが、サイトの変更が必要になった時に楽ではないかと思います。
    私は別々にするのをお勧めしますが、gelgelgelさんがご自分で管理しやすいと思う方で運営してみください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません