検索
カレンダー
2016年5月
« 4月    
1234567
891011121314
15161718192021
22232425262728
293031  
ブログメニュー

.htaccessだけでSSL対応するには

2006年10月22日

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 の記述が抜けていたので追記しました。指摘してくださったタルさん、ありがとうございました。

8件のコメント »

  1. mod_rewriteでのhttps→httpのがうまくいかず2日間さまよっていたところ、こちらにたどり着き、やっと解決しました。
    当たり前すぎて省略されているのか、なくても動く環境があるのかわかりませんが、私の場合、これらの記述の上に
    RewriteEngine On
    RewriteBase /
    が必要でした。
    ありがとうございました。

    Comment by タル — 2007/10/31 @ 9:51:27

  2. お役に立てたようでよかったです。
    記述の抜けの指摘ありがとうございます。早速反映しました。
    RewriteBaseですが、これは環境によって変わる可能性があるので書かないでおきました。

    Comment by nishijima — 2007/10/31 @ 16:58:53

  3. すいません。もしよろしければ、ひとつ教えていただけないでしょうか?
    こちらで教えていただいた方法で、順調に設定できていたのですが、サイトルート(public_html)のindex.htmlはじめいくつかのhtmlファイルをhttpsからhttpにリダイレクトさせようとして、半日以上いきづまってます。index.htmlをリダイレクトするように設定すると、当然のことながら、以下の階層のindex.htmlすべてが影響を受けます。どのようにすれば、サイトルートのindex.htmlだけを指定できますでしょうか?正規表現などの勉強不足なのを棚に上げて、あつかましい質問して申し訳ないのですが、よろしければ教えてください。

    Comment by タル — 2007/10/31 @ 18:09:08

  4. ファイルのパスが固定されているのでしたら、ファイル名を明示すればよいと思います。
    例えばサイトルートの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]

    正規表現を駆使できればもう少しスマートにできるかもしれませんが、ここに書ける正規表現てすごく制限があるんですよね(^^;

    Comment by nishijima — 2007/10/31 @ 19:01:00

  5. ばっちりいけました。
    本当に助かりました。ありがとうございました。
    また、訪問させていただきます。

    Comment by タル — 2007/10/31 @ 19:29:53

  6. お役に立ててよかったです。
    今後とも宜しくお願いします。

    Comment by nishijima — 2007/10/31 @ 19:30:52

  7. SSL対応するディレクトリを個別に指定する…

    特定のディレクトリにのみ、SSLを有効にさせる.htaccess記述

    サーバ側で.htaccessとmod_rewriteが組み込まれていることが前提。
    SSLを有効 (more…)

    トラックバック by WORK NOTE BLOG — 2008/10/9 @ 18:31:26

  8. [...] ある技術者の備忘録 http://www.meibinlab.jp/nishijima/archives/54 [...]

    ピンバック by 相対アドレスのまま、指定ページのみHTTPSにする方法 | 決まらないタイトル。決まるスケジュール。 — 2009/10/27 @ 12:04:18

TrackBack URL : http://www.meibinlab.jp/nishijima/archives/54/trackback

コメントする