カラクリスタ

ApacheでSSLの有無によってディレクトリを振り分ける方法

概要: 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 Onmod_rewriteを有効化。

#stopperの部分は rewrite が無限ループにならないための指定。 僕の場合、ずっとこの部分がうまく行かなくてハマってました。

ちなみに rewrite のストッパーとなるRewriteRuleは、 実行したいRewriteRule よりも前 、に書く必要があります。

んで、次に SSL(HTTPS)の部分の判別は、%{HTTPS}onoffで入ってるので、 これをRewriteCondでの条件指定に利用します。

なお、RewriteCondでの条件分けは、 どうやら RewriteCond直下のRewriteRuleにのみ 有効らしいので、 その辺り理解してないとハマります。っていうかハマりました。

で、あとは普通にRewriteRuleを書けば、SSL(https)の on/off で、 ディレクトリ等を振り分けることができます。

ざっと感想

ちなみに、上記.htaccessのコードは、 環境非依存の Apache の.htaccessのコードなので、 多分どこでも使えると思います。

で、僕はこのコードにたどり着くまでに一時間ほど格闘しておりました。

いやぁアレだよ!  Apache のmod_rewriteのコードなんて、 さくらインターネットのスタンダードプランのサーバで、 blosxom とか自作の plasxom とか使ってた頃以来使ってなかったから、 もうコツとか色々なアレなんてすっかり忘れてたよ! おかげさまでもうどんはまりしましたよ!ふぁ(ry

まあ、ちゃんと実現できたんで良かったですけどね。 出来なかったら、本当どうしようかと思いました。

あ、ちなみに上記コードは一応パブリックドメインとしておくので、 どうぞご自由にご利用ください。改造も自由。

とりあえず今日の記事は以上。いやあ本当疲れました>< 簡単だと思ってたのが甘かった。

ちゃんちゃん。

#FIXME