サーバーのドキュメントルートは、c:\xampp\htdocsなのですが、symfonyではプロジェクトディレクトリの下にあるWEBというフォルダがドキュメントルートになっているようです。
ここをhttpd.confにてドキュメントルートに変えてしまえば、symfonyのプロジェクトページが綺麗に表示されるのですが、そうすると、もとのHPが表示されません。
そこで、ドキュメントルートは変えずにエイリアスだけ変えてみましたが、それだとsymfonyのプロジェクトページのCSSや画像が適用されない汚いページになってしまいます。
うまく説明できませんが、要するに、
http://www.●●●.com/
でHPを表示させ、
http://www.●●●.com/sampleproject/
で、アプリケーションを表示させたいのです。
私は、以下のようにやってみました。
mkdir c:\xampp\htdocs\sampleproject
cd c:\xampp\htdocs\sampleproject
symfony init-project sampleproject
symfony init-app bbs
httpd.confの末尾に下記を追加
Alias /sf "c:\xampp\php\pear\data\symfony\web\sf"
<Directory "c:\xampp\php\pear\data\symfony\web\sf">
AllowOverride All
Allow from All
</Directory>
<Directory "c:\xampp\htdocs\sampleproject\web">
AllowOverride All
Allow from All
</Directory>
PEARを使った場合のsymfonyの設定ですが、オフィシャルのドキュメントでは、
ドキュメントルート以下に設定するようになっているので、エイリアスの指定を多少変更する必要があります。
CSSなどは、ルート以下の/sfディレクトリがデフォルトとなっています。
つまり、今回の場合は、/sampleproject/sfが画像などへのパスとなっています。
しかしながら、インストールドキュメントには、/sfへのエイリアスを貼っています。
そのため、画像などが参照できなくなっています。
方法としていくつかあります。
1.コピーする
取り合えずということで、一番簡単なのは、
c:\xampp\php\pear\data\symfony\web\sf
を
c:\xampp\htdocs\sampleproject\web
以下にコピーしてしまいます。
symfonyのバージョンアップを考えない場合はこれが一番簡単です。
画像などはスタートアップ時しか、標準のものは使わないと思いますので、これで十分な場合も多いです。
2.シンボリックリンクを貼る
*nixであれば、
c:\xampp\php\pear\data\symfony\web\sf
を
c:\xampp\htdocs\sampleproject\web\sf
とシンボリックリンクを貼るのも簡単な方法です。
3.エイリアスで対処する。
Apacheの設定を次のようにして対処する
Alias /sampleproject/sf "c:\xampp\php\pear\data\symfony\web\sf" Alias /sampleproject "c:\xampp\htdocs\sampleproject\web"
このエイリアスの順番を入れ替えるとうまくうごかないので、順番を守ってください。
参考になれば。
思いつきですが…
<Location> ディレクティブも一緒に設定してみたほうがいいんじゃないでしょうか。
何パターンか試してみましたが、ダメでした><
3の方法で手元のLinux環境のapacheだとうまく言ったんですけどね・・・。
3の方法で駄目だったとのことですが、ページ自体が表示されないということでよいですか?
その際に、エラーログにはどのような出力がありますか?
また、
http://www.●●●.com/sampleproject/bbs_dev.php/
にアクセスするとどうですか?
あと、こちらは未確認なのですが、もう一つ方法がありそうです。
4.config/setting.ymlを編集
http://trac.symfony-project.com/wiki/InstallingSymfonyInASubDire...
Change this:
all:
.settings:
# relative_url_root:
To this:
all:
.settings:
relative_url_root: /blog
4の方法で動作しました!
ありがとうございます。
私も同じ問題で悩んでいたので解決方法を探してみました。
たどり着いた方法は、web ディレクトリを任意の場所にコピーし、web/index.php の中にある SF_ROOT_DIR の値を書き換える方法です。
例えば、c:\xampp\htdocs 以下にプロジェクトを作成すると外からファイルが丸見えになってしまうので、c:\xampp 直下にプロジェクトを作成したとします。
mkdir c:\xampp\sampleproject
cd c:\xampp\sampleproject
symfony init-project sampleproject
symfony init-app bbs
まず、web ディレクトリを外からアクセス可能な任意の位置にコピーします(ディレクトリ名の変更も可)。
例えば、c:\xampp\htdocs の下にコピーした後、bbs とディレクト名を変更したとします。
最後に、c:\xampp\htdocs\bbs\index.php(デバッグする場合はbbs_dev.phpも)内の SF_ROOT_DIR を適切に書き換えます。
今回の例だと、
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/../../sampleproject'));
となります。
以上のようにすれば、ドキュメントルートの設定はデフォルトのままで、アプリは http://www.●●●.com/bbs/ で呼び出すことが可能です。
この辺の設定の要領が分かれば、一つのプロジェクトに複数のアプリを作った場合でも、コピーやファイル名の変更をやりくりして、何とか出来るのではと思います。
ちなみに*nixの場合はコピーの代わりにシンボリックリンクが使えるので少し楽です。
また、レンタルサーバなどでsymfonyが自由にインストール出来ない場合は、freeze コマンド(動作に必要なファイルをプロジェクトディレクトリにコピーし、単独で動作できるようにしてくれる。元に戻すには unfreeze)と、.htaccess の書き換え(RewriteBase の設定)をプラスすることで動作可能となります。
おお、動作しました!!
ありがとうございます^^
詳しくありがとうございます。
1.2ともにうまくいきました。
しかし、3はうまくいきません><
そんなページはないと言われてしまいます。