【WordPress】WordPressのSSL対応(httpsでアクセスしても警告されないようにする)
問題
WordPressで構築したサイトに httpsでアクセスしたら、ブラウザで警告が出た!
対策する
WordPressのテーマで、ごく標準的な書き方をすると、スタイルシートのURLが「http://~」になる。
これではhttpsでアクセスすると、警告されてしまいます。
よくあるごく普通の書き方
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title><?php bloginfo('name'); ?><?php wp_title(); ?></title> <link href="<?php bloginfo('stylesheet_url'); ?>" rel="stylesheet" type="text/css" /> </head> <body> ... ...
<?php bloginfo('stylesheet_url'); ?>
が、管理画面で設定したブログのURLを頭に付けてくれて、常にhttp。
この問題については、httpsオンリーのWebサイトだからhttps決め打ちで!のような特定の環境向けのテーマなら対応可能ですが、汎用的なテーマでは無理と考えた方がよいと思います。
WordPressの問題というより、Webアプリ一般の問題で、アプリ側では、クライアントがhttpでアクセスしているのか、httpsでアクセスしているのか厳密には判断できません。例えばポート番号を見たとしても、プロキシが間に入っている環境ではこんな状況になったりします「クライアント→(https:443)→プロキシ→(http:80 or 80じゃないかも!)→WordPressのサーバー」。
さらに、httpのときとhttpsで同じディレクトリが見えるかどうかはWebサーバー側の設定次第です。
じゃあどうするの?
設定で何とかするとか、環境を自動的に判断するなどは、そもそも無理という前提で考える。こういう方法でどうでしょうか。
前提条件は、SSLなしのときとSSLありのときで、同じ内容にアクセスできる設定の場合です。
対応方法1)URLのスキーム部分を削る
<link href="http://www.example.com/path/to/css" ...
これだからダメなのです。
こうするんです <link href="//www.example.com/path/to/css" ...
<link href="<?php echo ltrim(get_bloginfo('stylesheet_url'), 'htps:'); ?>" rel="stylesheet" type="text/css" />
左側から、h,t,p,s,:の文字を除去します → http: や https: が除去され、//ドメイン/path/to/css になります。
対応方法2)URLのスキームとドメイン部分を削る
<link href="http://www.example.com/path/to/css" ...
これだからダメなのです。
こうするんです <link href="/path/to/css" ...
<link href="<?php echo strstr(substr(get_bloginfo('stylesheet_url'), 8), '/'); ?>" rel="stylesheet" type="text/css" />
数字の8は何かというと、「http://x」や「https://」の文字長で先頭の8文字ぐらいは無視したかったからです。
ドメインの次の/の前までを削除します → http(s)://www.example.com がなくなって、/path/to/css になります。
いかがでしょうか。もっとよい案があれば、ぜひ教えてください!
コメント