httpアクセスをhttpsにリダイレクトさせる

ここ最近では私自身も通常のhttp領域のドキュメントルートとhttps(SSL)領域のドキュメントルートを同じところにしてしまうというのが習慣になっています。むかしは完全に分けててたりしてたんですが、何かとやりずらいです。cgi-binなんていう感じでcgiで動くコンテンツも同様に違うディレクトリに分けて設定してました。でも今は全部同じところでやってしまいます。
ですが、httpとhttpsの両方でアクセスできてしまうと、手練の人間はURLを直接書き換えちゃって「お!両方でアクセスできるわ」とかやっちゃうし、Googleとかはhttpsでアクセスしてほしいのにhttpでインデックスしちゃったりするんですね。これ困りますね。コノニカルだかクロニクルだか忘れましたが、URLはいずれにしろ1つであるのが好ましいとされております。SEO的に。
で、結構面倒なんですが、httpでアクセスした際には無理やりhttpsにリダイレクトさせるということをやります。

httpからhttpsにリダイレクトさせる

.htaccessファイルに以下のように書いて、mod_rewriteさせちゃいます。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

とあるディレクトリ以下だけhttpsに強制的にリダイレクトさせたいという場合は、こちらのソースを.htaccessファイルに書いておけばOKです。

常にhttpでアクセスさせる

逆の場合もあって、httpsでもアクセスさせることができるんだけどhttpで来てねという場合には、以下のように書きます。常にhttpでアクセスさせるということになります。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

いずれにしろSSLでアクセスしてほしいコンテンツはディレクトリでまとめて.htaccessで制御させるというのが一番容易かと思います。常にhttpでアクセスさせる方のrewriteはドキュメントルート直下においておけばいいです。

また、サイトごと全部httpsとかいう場合には、Apacheのhttpd.confとかapache2.confみたいな設定ファイルに書いてしまった方が楽。

.htaccessが使えるかどうか確認

といっても最近のレンタルサーバーではたいてい使える設定になっている上に、専用サーバーでもたいていはhtaccess使える設定にする筈なので、あくまでも確認というところではあります。.htacessファイルを作成して適当な「あいうえお」とか書いて保存すると、htaccessが使える状態の場合はInternal server errorになります。または、
AuthType Basic
AuthName hoge
Require valid-user

とBasic認証のダイアログだけ出るようなディレクティブを書いておくとかで確認できます。