こんにちは、なかわけです。
またEC-CUBEの話題です。
いま開発している環境はだいぶ変わった環境のため、あまり同じ状況で困る方がいないと思いますが、まとめておきます。ほぼ自分的メモです。
http://yourdomain.com/
というのが本流のAサーバがあり、理由があって
http://yourdomain.com/neko/
でアクセスされたときにリバースプロクシでBサーバに接続するという環境です。Bサーバは仮想ホストで、内部的にローカルIPが振られています。
そして
http://yourdomain.com/neko/
にEC-CUBEをインストールしています。
このときEC-CUBEで任意のページ(nakawake.php)を制作すると通常
http://yourdomain.com/neko/user_data/nakawake.php
というアドレスになります。
しかしこのままではnakawake.phpにアクセスできないです。これはEC-CUBEの仕様ですが、ページにアクセスしたときにまず、自分自身のURLを取得しようとします。具体的には
/data/class/helper/SC_Helper_PageLayout.php
の53行目あたりで
$url = “http://” . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
という感じでURLを取得・生成しているのですが、このときに$_SERVER['HTTP_HOST']はローカルIPを返すため、
http://192.168.x.x/neko/user_data/nakawake.php
となってしまい、ページが表示されません(正確に言うとページにはアクセスできますが情報の取得に失敗してコンテンツの一部が表示されないページになります)。
解決方法としては、リバースプロクシしてきたホストを取得する $_SERVER['HTTP_X_FORWARDED_HOST']を使ってURLを生成するようにファイルを書き換えるか、$_SERVER環境変数をハックして、$_SERVER['HTTP_HOST']はyouradmin.comを返すように上書き設定するかのどちらかあたりになると思います。
Tags: EC-CUBE