SSLを考えずに作られているページを、.htaccessだけの変更でSSL対応する方法をご紹介します。
もちろん、サーバがSSLに対応している必要はありますが…。
さらに.htaccessとmod_rewriteが入っている必要もあります。
SSLページにしたいHTMLファイル(PHP等でも可)のあるディレクトリに.htaccessファイルを作成し、下の文を追加します。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
ファイルを個別に指定したい場合はちょっと面倒ですが下記のようにします。
ここでは例としてfoo.htmlとbar.htmlをSSLページとし、それ以外はSSLでないページとします。
RewriteEngine on
RewriteCond %{REQUEST_URI} .*/foo.html$ [OR]
RewriteCond %{REQUEST_URI} .*/bar.html$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{REQUEST_URI} !(.*/foo.html$)
RewriteCond %{REQUEST_URI} !(.*/bar.html$)
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
(2007/10/31追記)
RewriteEngine on の記述が抜けていたので追記しました。指摘してくださったタルさん、ありがとうございました。

mod_rewriteでのhttps→httpのがうまくいかず2日間さまよっていたところ、こちらにたどり着き、やっと解決しました。
当たり前すぎて省略されているのか、なくても動く環境があるのかわかりませんが、私の場合、これらの記述の上に
RewriteEngine On
RewriteBase /
が必要でした。
ありがとうございました。
コメント by タル — 2007/10/31 @ 9:51:27
お役に立てたようでよかったです。
記述の抜けの指摘ありがとうございます。早速反映しました。
RewriteBaseですが、これは環境によって変わる可能性があるので書かないでおきました。
コメント by nishijima — 2007/10/31 @ 16:58:53
すいません。もしよろしければ、ひとつ教えていただけないでしょうか?
こちらで教えていただいた方法で、順調に設定できていたのですが、サイトルート(public_html)のindex.htmlはじめいくつかのhtmlファイルをhttpsからhttpにリダイレクトさせようとして、半日以上いきづまってます。index.htmlをリダイレクトするように設定すると、当然のことながら、以下の階層のindex.htmlすべてが影響を受けます。どのようにすれば、サイトルートのindex.htmlだけを指定できますでしょうか?正規表現などの勉強不足なのを棚に上げて、あつかましい質問して申し訳ないのですが、よろしければ教えてください。
コメント by タル — 2007/10/31 @ 18:09:08
ファイルのパスが固定されているのでしたら、ファイル名を明示すればよいと思います。
例えばサイトルートのindex.htmlとindex2.htmlだけHTTPでそれ以外をHTTPSにしたい場合は次のようになります。
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/index.html$ [OR]
RewriteCond %{REQUEST_URI} ^/index2.html$
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{REQUEST_URI} !(^/index.html$)
RewriteCond %{REQUEST_URI} !(^/index2.html$)
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
正規表現を駆使できればもう少しスマートにできるかもしれませんが、ここに書ける正規表現てすごく制限があるんですよね(^^;
コメント by nishijima — 2007/10/31 @ 19:01:00
ばっちりいけました。
本当に助かりました。ありがとうございました。
また、訪問させていただきます。
コメント by タル — 2007/10/31 @ 19:29:53
お役に立ててよかったです。
今後とも宜しくお願いします。
コメント by nishijima — 2007/10/31 @ 19:30:52
SSL対応するディレクトリを個別に指定する…
特定のディレクトリにのみ、SSLを有効にさせる.htaccess記述
サーバ側で.htaccessとmod_rewriteが組み込まれていることが前提。
SSLを有効 (more…)
トラックバック by WORK NOTE BLOG — 2008/10/9 @ 18:31:26
[…] ある技術者の備忘録 http://www.meibinlab.jp/nishijima/archives/54 […]
ピンバック by 相対アドレスのまま、指定ページのみHTTPSにする方法 | 決まらないタイトル。決まるスケジュール。 — 2009/10/27 @ 12:04:18