モノラルログ

マツオ ( @matsuoshi / monaural.net ) のざっくりしたブログです

http と https の領域を、.htaccess の設定で行ったり来たりさせる (1)

メモです。

フォームなどは SSL でアクセスさせたい、通常のページはhttpで、でも共通で使う画像などもありますよ、というとき、.htaccess のリダイレクトの設定だけでなんとかする方法。

前提

  • http と https では、ファイルを置く領域が異なるとき
  • /secure と /contact フォルダは https でアクセスさせたい
  • /common フォルダはどちらからでもアクセスできるようにしたい
  • その他は http でアクセスさせたい

http 側の .htaccess

RewriteCond %{REQUEST_URI} ^/secure/ [OR]
RewriteCond %{REQUEST_URI} ^/contact/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

https 側の .htaccess

RewriteCond %{REQUEST_URI} !^/secure/
RewriteCond %{REQUEST_URI} !^/contact/
RewriteCond %{REQUEST_URI} !^/common/
# CakePHP向け ここから
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} !^/debug_kit/
# CakePHP向け ここまで
RewriteRule ^.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

これで、

  • 通常のページはhttpsでアクセスしようとしてもhttpにリダイレクトされる
  • /secure/ と /contact/ は http でアクセスしようとしても https にリダイレクトされる
  • /common/ は http からでも https からでもリダイレクトされない

という設定になります。

なお、http と https とで領域が同じ場合の方法は、こちら