http:とhttps:の自動切換え(MODxに限りませんが)

例えば、お問い合わせフォーム等の特定のページだけにSSLを効かせて、その他のページは非SSLに戻すということ。
ここでは、Apachemod_rewriteを使って、自動的に切り替える設定について書きます。

簡単に言うと、特定のページが非SSL(http:〜)でアクセスされたらアドレスを「https:〜」に書き換え、特定のページ以外の「****.html」(*1)がSSLhttps:〜)でアクセスされたらアドレスを「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]