トップページはSSLで表示できるが、下層ページを表示させようとすると、スタイルシートやjavascript、画像等がSSLで読み込まれない。
原因を探っていると、下層ページで $_SERVER['HTTPS'] がセットされていないことが判明。
いろいろなケースを確認したところ、WordPressのパーマリンク設定をディレクトリ形式にせず、デフォルトにすると表示できることも分かった。
ディレクトリ形式のパーマリンクをリダイレクトする所に何かがあると考え、リダイレクト部分を突き詰めていくと、結局、以下のような .htaccess ということになる。
# BEGIN WordPress
<IfModule mod_rewrite.c>
</IfModule>
# END WordPress
実在するディレクトリ内に設置した index.php では、$_SERVER['HTTPS'] がセットされているが、
実在しないディレクトリにアクセスしてみると、$_SERVER['HTTPS'] がセットされていないことが判明した。
この現象にWordPressは関与していないわけだ。
さくらインターネットのサポートに電話したが、コンテンツに関することはサポートできないとのこと。いや、これはコンテンツに関する問題ではないでしょう。
WordPressがSSLを判定している関数は、wp-includes/functions.php 内の is_ssl() だが、以下の通り、$_SERVER['HTTPS'] をもとに判断している。さくらインターネットの SNI SSL のポートは80のままなので、ポート番号も使用できない。
/**
* Determine if SSL is used.
*
* @since 2.6.0
*
* @return bool True if SSL, false if not used.
*/
function is_ssl() {
if ( isset($_SERVER['HTTPS']) ) {
if ( 'on' == strtolower($_SERVER['HTTPS']) )
return true;
if ( '1' == $_SERVER['HTTPS'] )
return true;
} elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
return true;
}
return false;
}
このままでは、さくらインターネットのSNI SSLでWordPressを運用するのは無理だね。
さくらレンタルサーバーの共有SSLを使うによると、共有SSLと同じような仕様のようだ。
2015.5.7更新
とりあえず、現状は上記サイトで述べられている共有SSLへの対応と同じ方法で運用してます。
2018年3月、さくらインターネットのレンタルサーバー仕様変更で$_SERVER['HTTPS'] がリダイレクトで消去されなくなったとのこと。
0 件のコメント:
コメントを投稿