http://example.jp/ は http だが、http://example.jp/security/ は SSL/TLS 必須と
する場合の .htaccess 設定。
方法1. バーチャルホスト (VirtualHost ディレクティブ) を別に切る
これが一番スマートかも。それができない場合は方法2 や方法3 で対応。
方法2. SSLRequireSSL を使う。
.htaccess に
SSLRequireSSL
と書くだけで、そのディレクトリ以下は SSL 必須となる (SSL 以外のアクセスは deny する)。
httpd.conf に記述するなら
<Directory "/foo/bar">
SSLRequireSSL
</Directory>
とする。
マニュアル:
http://httpd.apache.org/docs/2.0/ja/mod/mod_ssl.html#SSLRequireSSL方法3. RewiteCond で判別し、http(80) の場合は他に飛ばす。
RewriteEngine on RewriteCond %{SERVER_PORT} ^80$ RewriteRule ([^/]*)$ http://%{HTTP_HOST}/$0 マニュアル:
http://httpd.apache.org/docs/2.0/ja/mod/mod_rewrite.htmlちなみに
SetenvIf SERVER_PORT 80 NO_SSL=1 Deny from env=NO_SSLという判定方法は SetenvIf から SERVER_PORT を参照できないため無理っぽい。
さらに余談。Apache-SSL には SSLRequireSSL と逆の働きをする (SSL なら拒否)、
SSLDenySSL というディレクティブが存在する。しかし mod_ssl には SSLDenySSL は
存在しないし、mod_ssl を取り込んだ形の Apache2 にも存在しない (
Apache-SSL と
mod_ssl は別物)。
- http://68user.blog27.fc2.com/tb.php/34-5e253ce2
0件のトラックバック
コメントの投稿