SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

【WordPress】WordPressのSSL対応(httpsでアクセスしても警告されないようにする)

問題

WordPressで構築したサイトに httpsでアクセスしたら、ブラウザで警告が出た!

wordpress

対策する

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 になります。

いかがでしょうか。もっとよい案があれば、ぜひ教えてください!

関連するメモ

コメント