>> HOME >> FC5 MENU >> Apache HTTPでアクセスした時、自動的に HTTPS に rewrite する方法
パスワードや情報の漏れを防止するため、SSL で暗号化することを基本とするページやディレクトリに誤って HTTP でアクセスした時、自動的に HTTPS に rewrite する方法です。
ここでは、Apache がバイナリ(rpm)インストールされたものを前提とします。

1. mod_rewrite の有効化
1 ) Apache 設定ファイル /etc/httpd/conf/httpd.conf 編集
2. mod_rewrite の設定
1 ) Apache 設定ファイル /etc/httpd/conf/httpd.conf 編集
3. Apache の再起動
1. mod_rewrite の有効化
1 ) Apache 設定ファイル /etc/httpd/conf/httpd.conf 編集
[root@linux ~]# vi /etc/httpd/conf/httpd.conf 

  :
  :
# コメントを外す
LoadModule rewrite_module modules/mod_rewrite.so
  :
  :
2. mod_rewrite の有効化
1 ) Apache 設定ファイル /etc/httpd/conf/httpd.conf 編集
[root@linux ~]# vi /etc/httpd/conf/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 ^/cgi-bin/hogehoge.cgi(.*)?$ https://%{HTTP_HOST}/cgi-bin/hogehoge.cgi [L,R]
</IfModule>
RewriteEngine On
rewriteを有効にする。
RewriteLog "logs/rewrite_log"
rewrite動作のログファイル指定。
RewriteLogLevel 0
rewriteのログレベル指定。[1] にすると膨大なログが出るので、デバッグが終わったら [0] にする。
RewriteCond %{SERVER_PORT} !^443$
サーバ(Apache)への接続ポートが443番では無かったら(即ち、HTTPSでの接続ではなかったら)、以下のルールを適用する。
RewriteRule
必要な分を1行づつ記述していくが、基本は正規表現でマッチングをとり、一致したらHTTPSにrewriteさせる。
[1行目の例]
http://mountainbigroad.jp/hogehoge/ というように、/hogehogeディレクトリ配下にアクセスがあった場合は、そのまま HTTPS に Redirect する例。
[2行目の例]
http://mountainbigroad.jp/cgi-bin/hogehoge.cgiというように、/cgi-binディレクトリの hogehoge.cgi にアクセスしたときだけ HTTPS に Redirect する例。
/cgi-binディレクトリ内のほかのものは HTTP でアクセスさせるが、hogehoge.cgiだけは HTTPS にしたい場合などに使用。
3. Apache の再起動
1 ) httpd の再起動
[root@linux ~]# service httpd restart 
httpdを停止中:                                             [  OK  ]
httpd を起動中:                                            [  OK  ]