http:とhttps:の自動切換え(MODxに限りませんが)
例えば、お問い合わせフォーム等の特定のページだけにSSLを効かせて、その他のページは非SSLに戻すということ。
ここでは、Apacheのmod_rewriteを使って、自動的に切り替える設定について書きます。
簡単に言うと、特定のページが非SSL(http:〜)でアクセスされたらアドレスを「https:〜」に書き換え、特定のページ以外の「****.html」(*1)がSSL(https:〜)でアクセスされたらアドレスを「http:〜」に書き換えるというルールを設定します。
以下の例は、「contact.html」だけをSSLに、その他のページを非SSLにする設定です。
(前半がSSLの指定、後半が非SSLの指定になります。)
RewriteCond %{REQUEST_URI} .*/contact.html$ RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] RewriteCond %{REQUEST_URI} !(.*/contact.html$) RewriteCond %{REQUEST_URI} .html$ RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
MODXなら、「.htaccess」に以下の2行が入っていますが、この2行より後に上記の記述を挿入します。
RewriteEngine On RewriteBase /
(MODx以外でも、この2行とあわせれば、基本的に同じはずです。)
さらに、SSLを効かせたいページが複数ある場合は、SSLの指定でアドレス指定をORでつなぎ、非SSLの指定でアドレス(否定)をANDでつなげばOKです。(単純に条件を並べればデフォルトでANDになります)
例えば、「contact.html」「ask.html」「inquiry.html」の3ページをSSLにする場合、上記のアドレスを指定している2箇所(各1行)を、それぞれ以下のように変えればOKです。
RewriteCond %{REQUEST_URI} .*/contact.html$ [OR] RewriteCond %{REQUEST_URI} .*/ask.html$ [OR] RewriteCond %{REQUEST_URI} .*/inquiry.html$
RewriteCond %{REQUEST_URI} !(.*/contact.html$) RewriteCond %{REQUEST_URI} !(.*/ask.html$) RewriteCond %{REQUEST_URI} !(.*/inquiry.html$)
(*1)
非SSLの指定(後半)には「.html$」の指定を入れていますが、これを入れておかなければ、全てのファイル(画像やCSSやJS等まで)が、非SSLで表示されます。つまり、ページはSSLで表示しても、画像等が非SSLになり、SSL内に非SSLが混ざっているとブラウザが警告を出してしまいます。これを防ぐため、ページのみに絞る「.html$」の指定を入れてあります。このあたりは、サイトの状況に応じて応用を効かせれば良いところです。
▼追記▼
トップページやディレクトリ(hogehoge/)が切り替わらない&階層も厳密にする。
RewriteCond %{REQUEST_URI} ^/contact.html$ RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] RewriteCond %{REQUEST_URI} !(^/contact.html$) RewriteCond %{REQUEST_URI} .html$ [OR] RewriteCond %{REQUEST_URI} /$ RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]