こんにちは、Webプログラマの篠田です。
2週連続で、大きな台風がやってきて散々な週末でしたが、今年最後の3連休は久々の行楽日和になりそうですね。
前回に引き続き、セキュリティのお話をご紹介していきます。
今日は、多くのWebサイトで採用されている、WordPressのSSL化についてまとめていきます。
運用しているWordPressをSSL化するときの問題点
Webサイトを常時SSL化する需要は、今後高まっていきます。
その中で、問題になるのが運用中のWordPressをで作られたWebサイトです。
どういった問題があるかというと、運用中に投稿されてきた記事の中に含まれる画像ファイルのパスが、簡単にはSSL化できないという問題です。
記事内の画像ファイルパスは自動では書き換わらない
Webサイト全体をSSL化するのは、管理画面の「設定」→「一般設定」から「WordPressアドレス」と「サイトアドレス」を変更することで、対応ができます。
テンプレート内で使用するURLの多くは、「一般設定」の変更により、SSL化の対応ができますが、記事に組み込まれている画像やPDFといった「メディア」のファイルパスは、変更されません。
もちろん、投稿記事だけでなく「固定ページ」で作成されたものや、「カスタム投稿タイプ」で作られたページも、自動的にはSSL化ができません。
作成されているページが、数ページであれば個別にURLを変更して、対応するということも可能ですが、運用期間が長いWebサイトですと、投稿記事数が数十、数百に達する場合もあるかと思います。
そのような場合、1つ1つのページを修正していくというのは現実的ではありません。
投稿記事を修正せずにSSL化する方法
WordPressでは、少しのプログラムを追加することで、この問題を一瞬で解決する方法があります。
その方法とは「add_filter」の機能を使って、表示される前に「http://」から「https://」に変換してしまうという手法です。
早速プログラムをご紹介します。
プログラムを追記するのは、使用しているテーマフォルダ内にある「functions.php」になります。
1 2 3 4 5 6 7 8 9 10 |
function change_site_url($the_content) { $searchUrl = "http://alaki.co.jp"; //置換前URL $changeUrl = "https://alaki.co.jp"; //置換後URL //置換処理 $the_content = str_replace($searchUrl, $changeUrl, $the_content); return $the_content; } add_filter('the_content', 'change_site_url', 1); |
これだけですw
WordPressのフィルターフックの中に、投稿内容を出力する時に大活躍している「the_content」というものがあります。
これは、「the_content()」を呼び出す前に実行される処理で、出力されるはずの「本文」に手を加えることができるという仕組みです。
今回は、「本文中」にある「https://alaki.co.jp」を「https://alaki.co.jp」に変更したいという目的があります。
なので、「the_content()」で出力される前に「https://alaki.co.jp」を「https://alaki.co.jp」に置換してしまいましょうというのが、プログラムの中身です。
この処理を行えば、記事内容に含まれている「すべて」の「https://alaki.co.jp」が「https://alaki.co.jp」に書き換わった状態で、Webサイトに表示され擬似的に「SSL化対応」ができあがります。
乱用はご注意
この方法は、いわば最終手段的な方法だと考えています。
記事の本文が出力される前にプログラムを実行する関係上、何もせずに表示するよりは時間がかかります。
※ユーザーが認識できるレベルでない場合が、ほとんどだとはおもいますが。。
そのため、最初から記事がSSL化されていることが、理想です。
ですので、既に投稿済みの記事数が少ない場合は、可能な限り人力で対応することをおすすめします。
まとめ
長い期間運用したWordPressサイトをSSL化することに、躊躇されていた方にとっては朗報ではないでしょうか。
WordPress特有の問題により一撃でSSL化することができない場合もあります。
ただ、ほとんどの問題はこのようなプログラムで解決できることばかりです。
是非、Googleさんが本気でSSL化を義務化する前に、ご利用のWebサイトをSSL化されてはどうでしょうか。