■HTTPでアクセスした時、自動的にHTTPSにrewriteする方法。

[概 要]

パスワードや情報の漏れを防止するため、SSLで暗号化することを基本とするページやディレクトリに誤ってHTTPでアクセスした時、自動的にHTTPSにrewriteする方法。

[対 策]

前提条件として、Apacheでmod_rewriteを使用できる環境が必要となる。Windowsなら、HunterのApacheを使用しているなら設定だけで利用できる。LinuxはRedHat標準のものなら同様に設定だけで、自分でコンパイルする場合は、./configureでDSOモジュールとして組み込むなら「--enable-so --enable-rewrite=shared」、モジュールと仕組みこむなら「--enable-rewrite」オプションをつけてコンパイルしなおせばrewriteが使用できるようになる。

  1. mod_rewriteの有効化

    [DSOモジュールで組み込んだ場合]

        DSOモジュールで組み込んだ場合は、httpd.confのLoadModule行をアンコメントしてmod_rewriteモジュールを有効にする。


    LoadModule rewrite_module modules/mod_rewrite.so  #コメントアウト(行頭の#)を外す。

    [組み込みモジュールとした場合]

        モジュールで組み込んだ場合は、以下で組み込みモジュール(mod_rewrite.c)があることを確認する。

    # /usr/local/apache2/bin/httpd -l
    Compiled in modules:
          (snip)
    mod_rewrite.c
          (snip)

  2. rewriteの設定

    httpd.confの適当な場所に以下を追加する。

    <IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteLog "logs/rewrite_log"
          RewriteLogLevel 0

          RewriteCond %{SERVER_PORT} !^443$
          RewriteRule ^/hogehoge/(.*)?$ https://%{HTTP_HOST}/hogehoge/$1 [L,R]
          RewriteRule ^/~oyaji/himitsu/himitsu.cgi(.*)?$ https://%{HTTP_HOST}/~oyaji/himitsu/himitsu.cgi [L,R]
    </IfModule>



    • RewriteEngine On

      rewriteを有効にする。

    • RewriteLog "logs/rewrite_log"

      rewrite動作のログファイル指定。Windowsなら"logs/rewrite.log"の方が扱いやすい。

    • RewriteLogLevel 0

      rewriteのログレベル指定。「1」にするだけで膨大なログが出るので、デバッグが終わったら「0」にしないと大変なことになる。

    • RewriteCond %{SERVER_PORT} !^443$

      サーバ(apache)へのアクセスポートが443番では無かったら(即ち、httpsでのアクセスではなかったら)、以下のルールを適用するという意味。
    • RewriteRule

      必要な分を1行づつ記述していくが、基本は正規表現でマッチングをとり、一致したらHTTPSにrewriteさせる。

      [1行目の例]

      http://www.aconus.com/hogehoge/ というように、/hogehogeというディレクトリ配下にアクセスがあった場合は、そのままhttpsにredirectする例。

      [2行目の例]

      http://www.aconus.com/~oyaji/himitsu/himitsu.cgiというように、おやじのhimitsuディレクトリ内のhimitsu.cgiにアクセスしたときだけhttpsにredirectする例。himitsuディレクトリ内のほかのものは公開でhttpでアクセスさせるが、himitsu.cgiだけはパスワードアクセスにしてあるので、暗号化したい場合などに使用。




Top Pageへ     戻る