お問い合わせや会員登録のページだけhttpsで接続し、それ以外のページはhttpにする(httpsで接続させたくない)という場合、mod_rewriteが使えるなら.htaccessに以下のように書くといいよという解説をよく見かけます。
1 2 3 4 5 6 7 |
RewriteEngine On RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} !(^/contact/.*$) RewriteRule /.*$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} ^/contact/.*$ RewriteRule /.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] |
が、実際にこれでは不十分で、contactページから呼んだCSSやJS、画像などがhttpで呼ばれるためにIEで「暗号化されていません」警告が表示されてしまいます。
Chromeに至ってはhttpsから呼ばれたhttpのファイルへは接続を完全に切ってしまうため、CSSやJSが効いていない無残な状態になります。
そこでHTTP_REFERERを取得し、httpsからの呼び出しならhttpsへリダイレクトするというルールを追加することで元のHTMLに手を加えることなくhttpsへの対応を行いました。.htaccessに以下のように記述します。#の行はコメントですので削除して問題ありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
RewriteEngine On #まずはcontact|signupのときにhttpsにする RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} ^/(signup|contact).*$ RewriteRule /.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L] #httpsから呼ばれるファイルでかつhttpじゃないものを全部httpsにする。 RewriteCond %{HTTP_REFERER} ^https://.*$ RewriteCond %{HTTPS} off RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule .*$ https://%{HTTP_HOST}%{REQUEST_URI} [L] #httpsにしたくないページをhttpsからhttpへリダイレクト RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} !^/(signup|contact).*$ RewriteCond %{REQUEST_URI} .html$ RewriteRule .*$ http://%{HTTP_HOST}%{REQUEST_URI} [L] |
ディレクトリ名(ここではsingupとcontact)は適宜変更が必要です。SSL対応したいディレクトリ名を記述してください。
ADs
コメントはまだありません。