.htaccessの設定について


ヘテムルサーバーにて、独自ドメインで独自SSLの利用を始めました。
SSLはhttp://www.(ドメインは以下example.comとします)でインストールしました。

現在、困っているのは、
あるディレクトリ(/data)のみhttpと入力された場合、httpsにリダイレクトするように
したいのですが、(https://www.exmaple.com/data/~にURLを統一させる)

http://www.exmaple.com/data/~.html ⇒ https://www.~(略) ●成功
http://exmaple.com/data/~.html  ⇒ https://www.~(略) ●成功
https://exmaple.com/data/~.html 
 ⇒この場合はうまくリダイレクトせず証明書エラーになります。

以下、htaccessの内容です。
(https://example~の場合の振り分けはよく分からなかったので表記しておりません)

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com [OR]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.example.com/data/$1 [R=301,L]

どのようにすればhttps://example~でもうまくリダイレクトできるのでしょうか?
上記の内容も色々調べて自分なりに書いてみたものですので、もしもっとよい書き方があれば教えてください。

よろしくお願いします。

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2012/03/13 16:15:59
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント500pt

条件が揃えば不可能では無いですが....。

そもそも、https://example.com の時に証明書のエラーになるのは、サーバから送られてくる証明書に記載されている FQDN と、つなごうとした URL に含まれる FQDN が合致しないためです。おそらく、証明書は www.example.com に対する証明書だと思いますが、「example.com」へつなごうとして、「www.example.com」の証明書が届いたので、エラーになっています。

これは、名前ベースのバーチャルホストの問題点として有名な話で、名前ベースのバーチャルホストでは、HTTP のやり取りの中で、クライアント側がなんという名前のサーバへアクセスしようとしているのかをサーバが把握しますが、SSL の場合は、その HTTP のやり取りより前に、証明書のやり取りなどの処理を行うため、証明書を渡す時点では、クライアントがつなごうとしたサーバ名が分からない、という問題があります。

今回の場合、https://example.com へ TCP レベルで接続した直後に SSL の処理が始まり、その段階でエラーになるので、Rewrite が作用する以前の段階でのエラーになります。

で、これを解決する手法としては、SNI という SSL/TLS の拡張機能があります。
Apacheの設定を変更し、単一IPアドレス上で複数のSSLサイトを運用する - builder

もし、Web サーバが SNI に対応していれば、

  • 「example.com」に対する証明書を買い足す。
  • VirtualHost で、www.example.com と example.com を作って、それぞれの証明書を設定する。

とします。具体的な設定は、下記のページが参考になると思います。
ウェブブラウザのSNI対応 | dodaの日記 | スラッシュドット・ジャパン

あと、ワイルドカード証明書を使う、ということも考えたのですが、「*.example.com」の証明書で 「example.com」は多分ダメじゃないかと。これが通るのなら、ワイルドカード証明書にするのがてっとり早いはずなのですが...。

id:htaccess404

回答ありがとうございます。
SSLはwww.example.comのみです。

>TCP レベルで接続した直後に SSL の処理が始まり、その段階でエラーになるので、Rewrite が作用する以前の段階でのエラーになります。


この部分を知らなかったので、問題点が理解できました。
解決策の方法はまだ詳しく理解できませんが、じっくり勉強してみます。
ありがとうございます。
 

2012/03/13 15:53:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません