WordPress ContactForm7のページだけ独自SSL対応

  • このエントリーをはてなブックマークに追加

サイト制作では問合せフォームだけ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]を選択します。

redirect

[/contact/]がリクエストURIとして指定された場合にHTTPSへリダイレクトするようにします。

redirect02

更新ボタンを押下して設定終了です。

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の場合
 }
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメント

コメントを残す