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 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
まあ、ちゃんと実現できたんで良かったですけどね。 出来なかったら、本当どうしようかと思いました。
あ、ちなみに上記コードは一応パブリックドメインとしておくので、 どうぞご自由にご利用ください。改造も自由。
とりあえず今日の記事は以上。いやあ本当疲れました>< 簡単だと思ってたのが甘かった。
ちゃんちゃん。
#FIXME