CMSのポテンシャルを引き出す─MODxで作る商用サイト

第10回 MODx Revolutionとコンテキスト

この記事を読むのに必要な時間:およそ 3 分

はじめに

最近は公私共にやや忙しく,なかみつ園のサイト更新が滞っている日々が続いていますが,商品自体は自信を持って熊本から提供しております。

真夏日の続くこの時期におすすめなのは,やはり冷水茶です。麦茶やペットボトルとは一味違った涼しさを体感できますので,まだ未体験の方は,ぜひお試しください。

さて,前回の記事ではMODxのバックエンドであるMySQLの構造についてお話ししましたが,その中で,コンテキストや語彙など,さまざまな意味不明な用語が出てきてしまいましたので,今回はそのひとつである「コンテキスト」について解説したいと思います。

コンテキストとは,MODxレベルで作成可能なバーチャルドメインのようなものです。たとえば商用サイトを構築する上で,独自ドメインやサブドメインを用いたキャンペーンサイトを立てることがあります。最近では一時期に比べると減ってきた印象が強いですが,数年前は映画の新作が発表されるたびに,キャンペーン用の独自ドメインサイトが作成されていました。

このようなキャンペーンサイトの多くは短期プロジェクトですが,ダウンタイムを極力避けるには冗長構成は必須ですし,ドメインごとにクラウドを利用する手もあります。または,もしすでに冗長構成に対応したウェブサーバやデータベースサーバをお持ちの場合は,それを母艦としてApacheのインスタンスを増やしていく考え方もあります。

Apacheはバーチャルホストをサポートしているため,MODxを異なったディレクトリに複数インストールし,MySQLデータベースも複数作成することで,多くのサイトを同一ホスト内でホスティングすることができます。しかし,インスタンス間でバージョンを維持したり,インスタンスの数だけデータベースを作成しメンテナンスする必要があったりと,拡張性は高いものの,

「多くのキャンペーンサイトは作りたいが,なるべく簡単に済ませたい」

という用途にはいまいち向きません。このような用途にピッタリなのがMODx Revolutionのコンテキストという機能です。コンテキストを活用すれば,Apacheの設定を変更することなく,ドメインやサブドメインごとに別のコンテンツを表示させることができ,複数サイト構築の手間を大幅に軽減させることができます。

さっそく設定してみよう

これまで,MODxの練習用に http://www.example.com/ というURLを使用してきましたが,今回はコンテキストの練習用に http://www.example.net/ というアドレスを使用します。example.comやexample.netとはサンプル用のドメインですので,筆者の検証環境では,ブラウザを実行しているクライアント上の/etc/hostsに

MODxサーバのIPアドレス	www.example.com	 www.example.net

といった設定を行っています。

まずは,コンテキストを設定しないデフォルトの状態で,ブラウザから「http://www.example.com/」⁠http://www.example.net/」を叩いた場合,これまで通りのコンテンツが表示されます。

図1 ⁠http://www.example.net」を叩いてもこれまでの画面が表示される

図1 「http://www.example.net」を叩いてもこれまでの画面が表示される

では,ドメインごとに別々の画面を表示させるため,管理画面よりコンテキストの設定を行います。⁠システム」⁠⁠コンテキスト」より,⁠新規作成」をクリックし,example.net用のコンテキストを作成します。

図2 example.net用のコンテキストを作成

図2 example.net用のコンテキストを作成

コンテキストの作成が終わったら,左側のメニューより「ツリーの再描画」をクリックし,画面をリフレッシュさせてください。同メニュー中に「example.net」というコンテキストが加わります。

図3 example.net用のコンテキストが作成された

図3 example.net用のコンテキストが作成された

では,このコンテキスト中にトップページとなるリソースを作成してみます。新しく作成したコンテキストを右クリックし,⁠作成」よりいつものようにリソースを作成してみてください。

図4 新コンテキスト内にリソースを作成

図4 新コンテキスト内にリソースを作成

このようにコンテンツを作成しただけでは,MODxが何をトリガーにそれぞれのコンテキストを表示するか判断することができませんので,これより

  • http://www.example.net/が叩かれた場合にはexample.netコンテキストをコールする
  • さらに,デフォルトでリソースID=17のコンテンツを表示する

という最低限の設定を行います。一番目の設定は,CMS上ではなく,sshなどのコンソール上から行います。シェルアクセスが許可されていない場合には,いったんファイルをダウンロードした上で編集,再度FTPなどでアップロードするようにしてください。

では,viなどのエディタを使って/var/www/html/index.phpを編集し,77行目付近の

$modx->initialize('web');

という定義を次の内容に置き換えます。

switch(strtolower(MODX_HTTP_HOST)) { 
 case 'example.net': 
 case 'www.example.net': 
   $modx->initialize('example.net'); 
   break; 
 default: 
   $modx->initialize('web'); 
   break; 
 }

これにより,MODxはHTTPヘッダ中のHTTP_HOSTを参照し,値がexample.netやwww.example.netであった場合には,example.netというコンテキストをコール,それ以外の場合はデフォルトであるwebというコンテキストをコールします。

著者プロフィール

中満英生(なかみつひでお)

大学時代に出会ったSolarisがきっかけでUNIXの世界へ。その後ホスティングプロバイダ,データセンターで実務経験を積む傍ら,雑誌記事の執筆や技術セミナーの講師を務める。サーバ設定の他,セキュリティに関する著作や技術者エッセイも執筆経験あり。

コメント

コメントの記入