特定ディレクトリのみ共有SSL化する.htaccess設定
最近は常設SSLが普及してきており、特定フォルダのみSSLということは少なくなってきました。
ただ、SSL化には費用が掛かるため、サーバー備え付けの共有SSLを使用するケースもございます。
しかしながら、共有SSLは名称にレンタルサーバー名称が含まれることが多いため、トップページ等主要部分にはオリジナルドメインを使用し、お問い合わせページには共有SSLを設定する使い方になります。
普通にやってみたら落とし穴がありました。
「htaccess」 「特定ディレクトリ」 「SSL化」で調べると、特定ディレクトリのみSSL化する方法はたくさん出てきました。
その通りにやってみると、うまい具合にお問い合わせページのみSSL化できたのですが、落とし穴がございました。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/特定フォルダ名/
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://共有SSLドメイン名%{REQUEST_URI} [R,L]
SSL表示されたお問い合わせページから、別のページへ移動すると、SSL化されたまま表示されました。
使う分には問題ないのですが、見た目にサーバー名称が表示されてしまうのが気になります。
できればお問い合わせページだけSSLにし、他のページは通常ドメインにしたいものです。
共有SSLでアクセスされたときのみ、通常ドメインにリダイレクトする処理を入れてみたところ・・・
カレントフォルダに共有SSLでアクセスされた場合に、通常ドメインへのリダイレクト処理を入れれば、よいのではないかと思い、特定文字アクセスのリダイレクト処理を入れてみたところ、リダイレクト永久ループが発生し、サーバーエラーとなりました。
どうやら、記述に矛盾があったようです。
何とかならないものかと試行錯誤していたところ、特定フォルダを除いてリダイレクトするということが可能なことがわかり、取り入れてみたところ、うまくいきました。
共有SSLを特定フォルダのみ割り当て、他のフォルダは通常ドメインにするhtaccess
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/特定フォルダ名/
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://共有SSLドメイン名%{REQUEST_URI} [R,L]
RewriteCond %{http_host} ^共有SSLドメイン名
RewriteCond %{REQUEST_URI} !(^/特定フォルダ名/)
RewriteRule ^(.*)$ http://通常ドメイン名%{REQUEST_URI} [R,L]
※注サーバーによっては、動作しない場合があります。
常設共有SSLのありがたみが染みた事象でした。