WordPress で細かいところまで手動で SSL 対応させる方法

WordPress で細かいところまで手動で SSL 対応させる方法です。

functions.php への記述

SSL の際に CSS や JS ファイルなども SSL 経由で読み込めるようにするのが主な作業です。SSL を全体を通して使ったサイトを作るのは考えてみたら初めてなので、抜けがあるかもしれませんのでご了承ください・

以下の記述で WordPress で自動的に出力される URL などのドメイン部分を削除して、/ から始まる絶対パスにすることで http の時は通常の、https の時は SSL 経由でファイルの読み込みを狙います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function wbsSSLURL($args) {
	$args = preg_replace("/s?https?:\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?/i", '', $args);
	return $args;
}
function wbsSSLURL_plugin($args) {
	$args = preg_replace("/s?https?:\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/wordpress/i", '', $args);
	return $args;
}
// add_filter('home_url', 'wbsSSLURL');
add_filter('site_url', 'wbsSSLURL');
add_filter('template_directory_uri', 'wbsSSLURL');
add_filter('stylesheet_uri', 'wbsSSLURL');
add_filter('plugins_url', 'wbsSSLURL_plugin');
 
function wbs_url($ssl = false)
{
	$url = get_home_url(null, '', null);
	if($ssl === true) {
		$url = str_replace('http://', "https://", $url);
	} else {
		$url = str_replace('https://', "http://", $url);
	}
	echo $url;
}

プラグインのフックについて

プラグインのフックだけ別途何かしていると思いますが、WordPress を別のディレクトリにインストールしている場合、例えばそれが /wordpress というディレクトリだった場合、プラグインなどが自分達の CSS を読み込む際に /wordpress/wordpress と2回自分のディレクトリを叫んでいました。

どのような理由でそうなったかは分かりませんが、フックでは WordPress ファイルがある場所を削ることにしました。おそらくそれ以前のフックなどが影響してこうなってきているのでしょうが今の私には分かりません。

wbs_url() 関数について

wbs_url() は引数に true 及び false を入れることで http もしくは https から始まるサイト URL に出力を切る変えることができます。これを使えばお問い合わせフォームへのリンクは https でそれ以外は http へのリンクをすることができます。/ から始まる絶対パスだと https の時はもうそれにしかアクセスできないですから、その切替を実現するために必要になるはずです。

これ以外の jQuery などのファイルを Google などから読み込んでいる場合は手動で https などにしておきましょう。

htaccess で特定のページを SSL にリダイレクトする

場合によってはページなどを自動的に出力していて、お問い合わせフォームへのリンクも http から始まるリンク、あるいは / から始まる絶対パスになっている場合は SSL のページに飛ばせません。https にできるようにフックなど使うのも良さそうですが、ピンポイントで SSL のページへ飛ぶようにするなら以下のように .htaccess へリダイレクト設定を加えるのもひとつの手です。

1
2
3
4
5
6
7
8
9
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /contact?$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/contact [R,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

3行目から5行目までが主に私が追加したものです。contact へのアクセスが SSL では無かった場合に https から始まる contact へのページへリダイレクトするようになっています。こうすることで確実に SSL のページへユーザを誘導できますが、SSL ではないページへアクセスさせるという選択肢も本来であれば用意する必要はあるんでしょうか。

追記: 共用 SSL の対応について

今回は独自 SSL への対応記事でした。共用 SSL はまた違った対応方法になると思います。また私で対応しましたら記事にしてみたいと思いますのでよろしくお願い致します。

追記: もっと効率的なものも教えてもらいました

WordPress で URL をすべて相対 URL にする方法 : dogmap.jp

コメント

コメントは受け付けていません。