サイト制作では問合せフォームだけHTTPSというのはよくありがちだけど、まとめ記事がなかなか見つけられなかったので、自分で記載します。尚WordPressで使うフォームは国内でよく使われている『ContactForm7』にしました。
共有SSLはよくない
まずは、SSL(HTTPS)対応する為に証明書の種類について調べてみました。独自ドメインが必須でなければ共有SSLが安くよいみたいです。例えばさくらレンタルサーバのドメイン(sample01.sakura.ne.jp)で既定サイトしか使わないのであれば、コストもかからずこれが良いと思います。ただ、独自ドメインでSSL暗号化を使いたいのであれば証明書をベリサインやGEOトラストの方で別途取得した方が良いです。
.htaccess のみで1ページをSSL対応する
独自ドメインの証明書によるWordPressの設定の前に、1つ参考までに紹介します。以下は、htaccessのみで単純なHTMLページを1ページ対応した場合の設定です。WordPressに必須となるリダイレクト設定に加えて、ページの条件でHTTP/HTTPSを振り分けています。今回の作業とは直接関係ありませんが、追々自分でも参考になると思い、メモしておきます。
# BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php ### http://xxxx.jp/contact/ だったらHTTPSにリダイレクト RewriteCond %{REQUEST_URI} .*/contact/$ RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] ### https://xxxx.jp/contact/ 以外だったらHTTPにリダイレクト RewriteCond %{REQUEST_URI} !(.*/contact/$) RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
1.独自ドメインを取得する
ベリサインやGEO TRUST、GlobalSignなどいくつも証明書を発行してくれる業者があります。それぞれのセキュリティ基準や価格帯によって変わってきます。サーバへ証明書をインストールします。 証明書のインストールが終わったらWordPressの設定に移ります。
2.コンタクトフォームページだけHTTPSにリダイレクトさせる
「http://xxx.jp/contact/」という問合せフォームがあることを想定して説明していきます。
2-1.HTTP→HTTPSへリダイレクト
WordPressテーマのheader.phpに直接書いてもよいのですが、より簡単にWordPressプラグインでリダイレクトさせます。 『Quick Page/Post Redirect Plugin』を利用してリダイレクトをかけます。[ダッシュボード]-[Redirect Options]-[Quick Redirects]を選択します。
[/contact/]がリクエストURIとして指定された場合にHTTPSへリダイレクトするようにします。
更新ボタンを押下して設定終了です。
2-2.HTTPS→HTTPへリダイレクト
WordPressでは、コンテンツで記載したURL以外の各メニューやフッターなど、相対パスで表示してくれている場合があります。その場合は一度HTTPSのページへ遷移すると、リンク先もHTTPSとなり、ちょっと不恰好です。全ページをSSLにするのも反対はしませんが、全ページ統一された暗号パターンですから、侵入者が解析しやすくなる可能性もあります。 「http://xxx.jp/contact/」以外はHTTPへリダイレクトするよう、こちらはWordPressテーマのheader.phpの最上部へ(HTMLタグ等がバッファへ送り込まれる前がベターです)記載します。
// =========================================== // HTTPS と HTTPのURLとリダイレクト設定 by zamuu // =========================================== if($_SERVER["HTTPS"]=="on"){ // HTTPSの場合 $pos = strpos($_SERVER["REQUEST_URI"], "contact"); if($pos == FALSE){ // 1文字目から合致 以外 header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"); exit; } }else{ // HTTPの場合 }
[…] WordPress ContactForm7のページだけ独自SSL対応 […]