カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

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

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

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

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

ちゃんちゃん。