クライアント側で用意したサーバがAWS。
というか、実際はAWSとも知らされておらず、FTPアカウントとphpmyadminを用意してもらってEC-CUBEを設定する案件がありました。
クライアントの先にいるシステム担当会社とも話ができず、ドメインから検索してサーバがAWSということはなんとか解ったのですが、AWSに不慣れなため非常に苦労しました。
インストールしたのはデザインテンプレートの関係で最新のEC-CUBE3ではなく、2.3.5版。悩まされたのは、EC-CUBEの初期設定でhttps強制をするとループが発生。
EC-CUBEのhttps強制は、インストール画面にも表示されますが、要は
data/config/config.phpの
define(‘ADMIN_FORCE_SSL’, FALSE);
の設定。
これをTRUE(強制)にすると管理画面にアクセスした際、ブラウザが
xxxx.jp でリダイレクトが繰り返し行われました。
となってしまい、NG。
それじゃあということで.htaccessでhttpをhttpsに強制しても同じくNG。
EC-CUBEの各テンプレートのリンクパスをhttpsから書いたりしましたが、ページを遷移するといつのまにかhttpになってしまいます。
さらに(意地になって)HEAD内にJavaScriptでhttpをhttpsに変えても、毎度毎度リンクパスは(ルートパスにしていても)なぜかhttpに行き、それからJSでhttpsにリダイレクトしている始末。
そんなにhttpに戻りたいのか?と言いたくなるほどでして。
まあいいかと、JSでhttpsに強制して、買い物の動作テストをすると、カード情報の画面で表示エラー(真っ白)に。
あー、それ致命傷じゃん。
結局、長年懇意にしている天才肌のプログラマーさんに教えを乞うと、
ロードバランサー配下なので元のリクエストがhttpsなのかEC-CUBEはわかっていない。
とのことで、下記のサイトにある「SetEnvIf」で対応すべしとのことでした。
AWS ELB + SSL Termination下でEC-CUBEを正しく動かす(続 カッコの付け方)
(以下抜粋)
mod_setenvif
apacheモジュールで setEnvIfというのがあります。これを使って$_SERVER変数を無理やり追加します。
SetEnvIf X-Forwarded-Proto ^https$ HTTPS=on
ありがとうございます。
.htaccessに上記の1行(SetEnvIf ***)を書いてUPしたら、解決しました。
プログラマーさんの指示とこのブログ主さんのおかげで、長いトンネルから抜け出すことができました。