さくらサーバ: 特定のページのみHTTPSで通信したい
環境
- ウェブサイト
- URL:
http://example.com/
- さくらサーバ(スタンダード)
- 共有SSL
- URL:
- 暗号文で通信したいページ
/login.php
(ログインページ)/contact.html
(メールフォーム)
さくらサーバで共有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なども含む。
- 平文: 対象ページ以外。
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$
の場合」と限定しているのは、ローカル環境ではリライトさせないためです。
なお、上記はさくらサーバ専用です。詳しくは下記をご覧ください。