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

読了まで:約2分


概要: 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)の​部分の​判別は、%HTTPSonoffで​入ってるので、​ これをRewriteCond​での​条件指定に​利用します。

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

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

ざっと​感想

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

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

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

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

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

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

ちゃんちゃん。

#FIXME

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。