さくらサーバでSSL通信にリダイレクト
さくらのレンタルサーバで、スタンダードプランでのお話。
お問い合わせフォーム的なページを作成して、HTTP通信な時はHTTPSにリダイレクトさせたかった。
アプリ側で切り替え制御させようとしたんだけど、これがなぜかうまくいかない。
SSL(HTTPS)通信でアクセスしても、HTTP通信として認識されてしまう。
???
んじゃま、.htaccess設定でmod_rewrite活用するか。ってことで、
RewriteCond %{SERVER_PORT} ^80$ RewriteRule ^form https://ドメイン.sakura.ne.jp/form [QSA,R,L]
formへリクエストが来たら、SSLドメインへGETパラメータをそのまま付与[QSA]してリダイレクト処理[R]。
ありゃりゃ??
無限リダイレクトになっちまったぞい(・ω・`)
サーバ変数を調べたら、SSL通信でも80番ポートでアクセスしてる…
どうやら、共有SSL使用するとproxy経由で80番ポートにアクセスしてくるらしい。
SSLかどうか判定できないじゃないか……
アプリ側でサーバ変数を拾っていたら、proxy経由つまりSSL通信のときだけに取得できる変数があった。
その名も…HTTP_X_SAKURA_FORWARDED_FOR。
proxy経由だとアクセスログ等が常に同じになってしまうのを防ぐために、接続元のIPなんぞを取得できるようにする為の変数に HTTP_X_FORWARDED_FOR なるものがあるらしいんだが。
それのさくら仕様の変数なのか?
mod_rewriteは、特定のサーバ変数以外は読み込めないらしいのでちょっと書き方が違う。
RewriteCond %{SERVER:X_Sakura_Forwarded_For} ^$ RewriteRule ^form https://ドメイン.sakura.ne.jp/form [QSA,R,L]
で設定したら成功した。だが、これが正しいのかは不明だ…