Facebookページはmixiと同じように、暗号化通信でログインできるモードがあります。
ですが、このモードで、IFrameで作られていて「セキュア接続のときの読み込み元」を指定していないFacebookページへ行くと、警告画面が出てしまいます。
IFrame内にフォームがあったりもするのですから、当然と言えば当然の話です。
となると、読み込み元のページをセキュア接続=SSLでも表示できるように作れば良いのですが、CMSベースで制作しているとそう簡単にはいきません。
著名なCMSのほとんどが、安価に利用できる共有SSLに対応していないからです。
共有SSLに対応できないCMSとは
具体的には、以下の条件に当てはまるCMSは、URLを書き換える共有SSLに対応できません。
- URLが指し示す場所に、ブログ記事の実体ファイルがない
- .htaccessなどを使って、スラッシュ区切りのURLに書き換えている
私がお仕事で対応しているCMSはこんな状況です。
MovableType
再構築で実体ファイルを書き出せるので、アーカイブマッピングなどを工夫して、ページ内のリンクを相対パスにすれば対応可能です。
WordPress
ブログをSSLでも表示できるようにするプラグイン「WordPress HTTPS」が動作すれば対応できます…が、動くかどうかはWordPressの設置状況やサーバーの共有SSLの仕様によって大きく変わってしまい、全く保証できません。
a-blog cms
現バージョンでは対応していないことが、公式に回答されています。
システムが単一のドメインに結び付けられる仕様なので、違うURLに転送できないのです。
どうしても共有SSLに対応したい場合の対策
サイト内の特定のページを共有SSLに対応させるのであれば、(かなり強引ですが)以下のような手段が考えられます。
結局、WebbingStudioのFacebookページはこの方法でセキュア対応をしました。
- 画像・CSSが「httpからの絶対パス」になるようにCMSを構築する
- 共有SSLに対応させたいページを、PHPの「file_get_contents」関数で取得
- ドメインを共有SSL用のドメインに「mbereg_replace」関数で置換
- 同じ階層の別ディレクトリに実体ファイルとして書き出す
- Facebookのセキュア用URLに、新たに書き出したファイルを指定する
このスクリプトを、一定時間ごとにcronで回します。
ただし、実体ファイルは表示結果から取得しているので、PHPスクリプトは動作しません。「いいね!」判定もできません。
サンプルコード
自動書き出しのサンプルコードは以下の通りです。
通常ページは「fb」ディレクトリ、SSL対応ページは「fb_ssl」ディレクトリとする前提です。
Facebookページがセキュア接続に対応していないと、訪問者が帰ってしまう確率が非常に高くなります。PHPが書ける人は挑戦してみてください。
#!/usr/bin/php5 <?php $url = array( 'http://example.com/fb/index.html', 'http://example.com/fb/post-1.html', 'http://example.com/fb/post-2.html', 'http://example.com/fb/post-3.html', ); $cash = array( '/path/to/server/full/fb_ssl/index.html', '/path/to/server/full/fb_ssl/post-1.html', '/path/to/server/full/fb_ssl/post-2.html', '/path/to/server/full/fb_ssl/post-3.html', ); $sslUrl = 'https://xxxxx-ssl/example.com/'; foreach($cash as $key => $var) { $fileContents = file_get_contents($url[$key]); //リンク先を修正 $pattern = 'href="/fb/'; $replacement = 'href="/fb_ssl/'; $fileContents = mb_ereg_replace($pattern, $replacement, $fileContents); //サーバー相対パスを書き換える $pattern = '="/'; $replacement = '="' . $sslUrl; $fileContents = mb_ereg_replace($pattern, $replacement, $fileContents); // テスト(文字列として出す) // echo htmlSpecialChars($fileContents); // echo "<p>=================================================</p>nn"; //本番(キャッシュを保存) $fh = fopen($var,'w'); if($fileContents != '') { fputs($fh, $fileContents); fflush($fh); } } ?>