すたらブログ

文系Webプログラマの備忘録

さくらサーバ: 特定のページのみHTTPSで通信したい

環境


さくらサーバで共有SSLを利用する準備

さくらサーバのコントロールパネルの左側にあるドメイン設定をクリックします。

SSLを利用したいドメイン変更ボタンをクリックします。

共有SSLを利用するを選び、送信ボタンをクリックします。

これで、下記のURLを開けば暗号文で通信できます。

  • https://secure1188.sakura.ne.jp/example.com/login.php
  • https://secure1188.sakura.ne.jp/example.com/contact.html

しかし、URLが大きく変わってしまうので、できればHTTPSの利用は対象ページのみに留めたいところです。
そこで、条件に応じてURLの先頭部分、https://secure1188.sakura.ne.jp/http://を使い分けるため、Apacheのモジュール、mod_rewriteを利用します。


対象ページのみ暗号文で通信するための設定

mod_rewriteを利用して、下記の条件に沿うようにリライトします。

  • 暗号文: 対象ページのみ。ページ内の画像やCSSなども含む。
  • 平文: 対象ページ以外。

.htaccess

RewriteEngine on

# 暗号通信を強制するためにリライト
RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{ENV:HTTPS} !(^on$)
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteCond %{REQUEST_URI} ^/login.php$ [OR]
RewriteCond %{REQUEST_URI} ^/contact.html$
RewriteRule .* https://secure1188.sakura.ne.jp/%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# 平文通信を強制するためにリライト
RewriteCond %{ENV:HTTPS} ^on$
RewriteCond %{REQUEST_URI} .*.(html|php)$
RewriteCond %{REQUEST_URI} !(^/login.php$)
RewriteCond %{REQUEST_URI} !(^/contact.html$)
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

最初の条件で「%{HTTP_HOST}^example.com$の場合」と限定しているのは、ローカル環境ではリライトさせないためです。
なお、上記はさくらサーバ専用です。詳しくは下記をご覧ください。