概要: Apache を使って SSL の on/off でディレクトリを振り分ける
いつも心にエターナルきのこブリザード、悪い意味でケアルが恋人、 にゃるらこと岡村 直樹(23)です。出だしが色々混ざってるけどキニシナイ!
さて、僕は fluxflex.com 上で動かすアプリケーションを書くとき、 アプリケーションの管理画面を HTTPS で、それ以外の公開ページを HTTP で、 それぞれ提供したいと考えていたりします。
分かりやすく言うと、
# 例えばブログエンジンの場合 投稿等のページ => https://{project}.fluxflex.com 公開するページ => http://{project}.fluxflex.com
という風に、 SSL(HTTPS) の有無で出てくる画面を切り替える、 という感じです。
で、fluxflex では HTTP Server に Apache が使われているので、
mod_rewrite
を使えば良いじゃない! と思いつき、
今日デイケアから帰ってきてから約 1 時間ほど格闘したのちにようやくできたので、
これを忘れないうににメモっておきます。
前提と条件
fluxflex.com上のプロジェクト名 => {project} fluxflex.com上の公開ディレクトリ => public_html/ 管理ページ用ファイル一式 => public_html/admin 公開ページ用ファイル一式 => public_html/public .htaccessの在処 => public_html/.htaccess
という条件で、
SSL(https)付きのアクセス => public_html/admin以下を表示 SSL無し(http)のアクセス => public_html/pubic以下を表示
したい場合。
.htaccess
は、
ざっとこんな感じ。
RewriteEngine On RewriteBase / # stopper RewriteRule ^admin - [[L]] RewriteRule ^public - [[L]] # on https RewriteCond %{HTTPS} on RewriteRule ^(.*)$ admin/$1 [[QSA]] # on http RewriteCond %{HTTPS} off RewriteRule ^(.*)$ public/$1 [[QSA]]
さらっと開設
まず、最初のRewriteEngine On
でmod_rewrite
を有効化。
#stopper
の部分は rewrite が無限ループにならないための指定。
僕の場合、ずっとこの部分がうまく行かなくてハマってました。
ちなみに rewrite のストッパーとなるRewriteRule
は、
実行したいRewriteRule
よりも前 、に書く必要があります。
んで、次に SSL(HTTPS)の部分の判別は、%{HTTPS}
にon
かoff
で入ってるので、
これをRewriteCond
での条件指定に利用します。
なお、RewriteCond
での条件分けは、
どうやら RewriteCond
直下のRewriteRule
にのみ 有効らしいので、
その辺り理解してないとハマります。っていうかハマりました。
で、あとは普通にRewriteRule
を書けば、SSL(https)の on/off で、
ディレクトリ等を振り分けることができます。
ざっと感想
ちなみに、上記.htaccess
のコードは、
環境非依存の Apache の.htaccess
のコードなので、
多分どこでも使えると思います。
で、僕はこのコードにたどり着くまでに一時間ほど格闘しておりました。
いやぁアレだよ! Apache のmod_rewrite
のコードなんて、
さくらインターネットのスタンダードプランのサーバで、
blosxom とか自作の plasxom とか使ってた頃以来使ってなかったから、
もうコツとか色々なアレなんてすっかり忘れてたよ!
おかげさまでもうどんはまりしましたよ!ふぁ(ry
まあ、ちゃんと実現できたんで良かったですけどね。 出来なかったら、本当どうしようかと思いました。
あ、ちなみに上記コードは一応パブリックドメインとしておくので、 どうぞご自由にご利用ください。改造も自由。
とりあえず今日の記事は以上。いやあ本当疲れました>< 簡単だと思ってたのが甘かった。
ちゃんちゃん。