Apache(httpd.conf)で,SSLとnon-SSLの接続をわける

Apache は普通に使ってると,SSL と non-SSL で同じディレクトリを使うのかもしれませんが(デフォルト設定を知らない),これは分けることができます

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
  DocumentRoot /usr/local/www/data
</VirtualHost>

<VirtualHost *:443>
  DocumentRoot /usr/local/www/data_ssl
  SSLEngine on
</VirtualHost>

こうすれば,本来 SSL が必要なアクセスで,間違って SSL 無しでアクセスされる恐れはなくなります

また,SSL に限らず,特定のディレクトリで,特定のポートへのアクセスだけ区別したい場合,

RewriteEngine on
RewriteCond %{SERVER_PORT} !80
RewriteRule .* [F]

とすると,80ポートへのアクセスに限定し,他のポートで Accept した場合は,Forbidden が返ります