人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

.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~でもうまくリダイレクトできるのでしょうか?
上記の内容も色々調べて自分なりに書いてみたものですので、もしもっとよい書き方があれば教えてください。

よろしくお願いします。

●質問者: htaccess404
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY
●500ポイント ベストアンサー

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

そもそも、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 に対応していれば、

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

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


htaccess404さんのコメント
回答ありがとうございます。 SSLはwww.example.comのみです。 >TCP レベルで接続した直後に SSL の処理が始まり、その段階でエラーになるので、Rewrite が作用する以前の段階でのエラーになります。 この部分を知らなかったので、問題点が理解できました。 解決策の方法はまだ詳しく理解できませんが、じっくり勉強してみます。 ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ