WordPress さくらサーバーでSSL(https)にならない場合の対処法

/ WordPress / Comment[0]

さくらインターネットのレンタルサーバ上でWordPressでSSL有効のサイトを構築しようとするとhttpのURLが残ってしまう場合があります。

原因

原因はWordPressコア関数であるis_ssl()が正常に判定できない点にあります。get_home_url()だとかget_template_directory_uri()などをはじめとするURLを取得する関数はis_ssl()により、SSLか否かを判定しています。is_ssl()がfalseを返せば管理画面でhttpsを指定していたとしても強制的にhttpに書き換えてURLを返してしまうのです。

is_ssl()が使えない理由

さくらサーバーは$SERVERに値がセットされていない場合があり、これがis_ssl()が正常に判定できない原因です。
is_ssl()のソースコードを見てみましょう。

wp-includes/load.php

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; }

この通り$SERVERに依存していることが分かります。
isset( $_SERVER['HTTPS'] )の時点で$SERVERがセットされていないためfalseを返します。

解決方法

WordPressのURLを吐き出す関数はおそらく全てis_ssl()に依存してるため、is_ssl()をtrueを返すようにしてしまえばhttpsのURLを吐くようになります。

$_SERVER['HTTPS'] = on

上記コードをis_ssl()関数が実行される前に書けばおkです。しかし、コアファイルを直接弄ってしまうと、アップグレード時に元に戻ってしまうので、アップグレード時に書き換わらない且つis_ssl()の定義される前にあたる
wp-config.phpに上記コードを追記します。

関連記事

コメント

:
:
:
:
:
管理人のみ表示を許可