さくらインターネットで共用SSLを利用してPEAR::HTML_QuickForm_Controllerにて画面遷移させようとするとハマる

※殴り書きなので、ディテールは省きます。
質問がありましたら、コメントの方でお知らせください。

いま、とあるサイトにてシステムを構築しており、
そのホスティングに、「さくらインターネット さくらのレンタルサーバ スタンダード」
http://www.sakura.ne.jp/rentalserver/standard/index.html
を利用している。

テストサーバ(SPPD)からの移行過程で、何とか改修に成功したが、原因を突き止めるのに、一週間以上かかった不具合があった。
(というか、さくらはクセがある、という話を聞いていたので、避けていたが、コスト的に激安なのでクライアントの意向により決定)
また、その挙動に関して記載された情報も極めて少なくて苦労したので、もし他の方の参考になればと思い、メモしておきたいと思う。

※ちなみに、解決のヒントは下記を参考にさせていただいた。感謝。
というか、最初から面倒くさがらずに$_SERVERのdiffを取れば良かったんだよな・・・、と反省。
http://www.usconsort.com/community/archives/626

・PHP, MySQLは入っているヤツかつ、推奨のものを素直に使う。
・PEAR::HTML_QuickFormControllerは、最初から入っている(そもそも入ってるのか確認してない。比較的マニアックなライブラリなようで。覚えると超便利なんだけどな)ものではなくて、独自にディレクトリを切って、その中で展開している。(ついでに若干改造)
・そのHTML_QuickFormControllerを利用して、「お問い合わせ」ページを作成。
入力画面→確認画面→完了画面→サイト管理者及びユーザーにメールを送信、という遷移となっている。
・さくらインターネットの共用SSLのアクセスURLは、https://xxx.sakura.ne.jp/ あるいは、https://secureXXXX.sakura.ne.jp/オリジナルドメイン/ となる。だが後者は長くなるし、別にsakura.ne.jpのドメインを隠せる訳でも無いので、前者で結構。
mod_rewriteによってhttps://オリジナルドメイン/でアクセスさせるようにもしてみたが、うまく動作しない。そもそも鯖の仕様としてそういうことはできないらしい(間違っていたらご指摘ください)

https://オリジナルドメイン.com/でアクセスさせたければ、大人しく独自SSLを導入しろ、ということかと思われる。

上記のような状態で、例えば「確認画面」に遷移するためにボタンをクリックすると、
次のようなエラーになってしまう。

エラーメッセージ画面

おいー。SSLってポート443じゃんよー。なんで80で繋ごうとするん!?

で、ここからポートフォワードがうんたら、とかの長い試行錯誤の旅が始まるのだが、それは省略。
解決方法は次の通り。

スクリプトの最初の方に以下のブロックを追加。

// コード開始
// さくらインターネット共用SSL対応
// 強制的にサーバポートを変更しないと、80で無理矢理繋ごうとするため。
if($_SERVER['SERVER_PORT']=='80') {
$_SERVER['SERVER_PORT'] = '443';
}
// コード終了

ふぅ~、こんだけなのに、すごい疲れた~~。
納期があって無いような案件だからまだちんたらやってられるが、これが急ぐ仕事だったらと思うと冷や汗ものだ。
ちょっとクソして、タバコ吸ってくる。

<追記>
あ、コード中に、見やすいようにインデントは入れてくださいね。
何か、このテーマ、<code>タグを使ってるにも関わらず、スペースとか無視するみたいなんで。


About this entry