今まで、何件かSSL対応をしたことがあります。
さくらインターネットははじめてのSSL対応だったので久々にはまりました。
トップページは何もエラーもなく無事に対応ができました。
しかし、トップページより下のディレクトリで、画面崩れが発生します。
エラーをみると、httpとhttpsが混在し、危ないサイトとして、認識されました。
そのため、Safariでは普通に表示(内部的なエラーはあり)がされますが、Google Chromeだと、うまく表示されません。
Mixed Contentとなります。
より、詳しく見ると、たしかに、
CSSの読み込み部分やjsの部分が、http://ではじまっていました。
わからなかったのが、トップページとその下のディレクトリでは、共通のheader.phpというものを使いまわしています。
同じソースにもかかわらず、なぜトップページだけ、httpsになり、その下のディレクトリではhttpになるのか。
このサイトを見て、全てがわかりました。
さくらインターネットのSNI SSLでWordPressを運用できない
どうやら、
下層ページでは、$_SERVER[‘HTTPS’] がセットされていないことが判明。
だそうです。
WordPressのSSL判定は、wp-includes/functions.php 内の is_ssl() という関数があります。
上記のサイトのように、is_ssl()関数を全て、trueにしてしまう方法もあります。一応動作しましたが、functions.phpに入れるのは、少しこわいと思い、別の手順でやることにしました。
wp-config.phpに下記を入れると良いでしょう。
if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) { $_SERVER['HTTPS'] = 'on'; $_ENV['HTTPS'] = 'on'; }
一応、念のため、私のほうでも、下記のソースコードで検証してみました。
サーバーのトップにtest.phpとして、httpでアクセスしたときとhttpsでアクセスしたときの挙動を確認しました。
<?php if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) { echo "OK"; } else{ echo "NG"; }
https://でアクセスするとOKが表示
http://でアクセスするとNGが表示されました
こんなことで、1日時間を潰して、しまいました。Wordpressを導入しても問題ないサイトであれば、このあたり、さくらインターネット側も対応すればいいのにと思いました。なぜ、この問題を放置するのかなと。
【参考サイト】
https://www.haluka.org/blog/2353/
http://webtechinnovation.blogspot.jp/2015/03/sni-sslwordpress.html
コメント
ありがとうございました。
散々悩んでいたのですが、1発で解決できました!!