Cookie 値で Web 公開ディレクトリを切り替える方法
Apache の .htaccess と Cookie 値を組み合わせて、クライアントがもつ Cookie の値に応じて Web 公開ディレクトリを切り替える方法をまとめます。
前回、.htaccess ファイル設定で Web 公開ディレクトリを変更する方法 という記事をまとめました。今回はさらにクライアントがもつ Cookie 値によって公開ディレクトリを変更する方法についてまとめます。
.htaccess 設定ファイルの基本については、前回の記事を参照してください。
構成の確認
変更前 〜 変更後
今回もウェブサーバーの環境が、以下のような構成で整っていると仮定します。
変更前
- ウェブサイトの URL:
http://example.com/ - サーバー上のディレクトリ(公開ディレクトリ):
/web/
これを、書き込まれている Cookie 値によって以下のような構成に切り替えます。
変更後
- ウェブサイトの URL:
http://example.com/ - サーバー上のディレクトリ(公開ディレクトリ):
/web/version1/または/web/version2/
準備として、/web/ の中に新たに version1 と version2 というディレクトリを作成します。この 2 つのディレクトリを、Cookie 値によって公開ディレクトリとして切り替えられるように設定します。
設定作業
Cookie の書き込みプログラム
先に Cookie の書き込みを行うプログラムを準備します。今回は PHP で作成します。
- プログラムファイル名:
setcookie.php
このプログラムは、GET で渡された version という名前のパラメータを受け取り、その値を Cookie に書き込みます。version パラメータが渡されなかった場合は Cookie の内容を消去します。
作成したファイルは、もともとの公開ディレクトリ直下に配置します。
/web/setcookie.php
プログラムの実行確認
プログラムにアクセスし、Cookie の書き込みを実行してみます。以下のように、version パラメータをつけてアクセスします。
http://example.com/setcookie.php?version=version1
これで Cookie に version という名前で値 version1 が書き込まれます。
.htaccess ファイルの記述
つづいて .htaccess ファイルを準備します。.htaccess というファイル名でテキストファイルを作成し、以下のように記述します。
RewriteEngine on
RewriteCond %{HTTP_COOKIE} version=version1 [NC]
RewriteCond %{REQUEST_URI} !setcookie.php$
RewriteCond %{REQUEST_URI} !/version1
RewriteRule ^(.*)$ version1/$1 [L]
RewriteCond %{HTTP_COOKIE} version=version2 [NC]
RewriteCond %{REQUEST_URI} !setcookie.php$
RewriteCond %{REQUEST_URI} !/version2
RewriteRule ^(.*)$ version2/$1 [L]※最終行に改行が必要です。
ファイルを、もともとの公開ディレクトリ直下にアップロードします。
/web/.htaccess
ポイントは、RewriteCond %{REQUEST_URI} !setcookie.php$ の行です。これを入れることで、setcookie.php 自身はリライト対象から除外され、Cookie の書き込み処理にアクセスできるようになります。
確認
設定が正しく反映されていれば、http://example.com/ にアクセスした際に /web/version1/ の中のコンテンツが表示されるはずです。
次に、setcookie.php に version パラメータを version2 としてアクセスし直します。
http://example.com/setcookie.php?version=version2
すると今度は、http://example.com/ にアクセスすると /web/version2/ の中のコンテンツが表示されるようになります。
※ブラウザのキャッシュによって version1 が表示されてしまう場合があります。
おわりに
今回紹介した .htaccess の記述では、version1 の場合と version2 の場合でパターンが繰り返されているのが分かると思います。同じパターンを追加で記述することで、他の Cookie 値やディレクトリ名にも簡単に対応できます。
この記事がよかったら、
スキやシェアで応援してもらえると励みになります。