MODxでの複数ドメイン・複数サイトの管理方法に悩む

新しいサイトの制作にオープンソースCMS、MODxの採用を検討しているのですが、複数ドメイン・複数サイトの管理方法に悩んでいます。

MODxを使用したサイトは既にいくつか制作しているものの、今回のサイトでは1つのデータベースを異なるドメインのサイト間で共有したいと思っています。さらには、MODx本体も1つで済ませる方法がないか試行錯誤中です。

複数ドメイン・複数サイトの管理方法

具体的にやろうとしていることは次のようなことになります。なお、MODxは現時点での最新版である0.9.6.1p2、サーバはXREA+(PHP5+MySQL5)です。

  1. 適当なディレクトリ(「/virtual/user/public_html/MODx/」)にMODx本体をインストールする(ここにはドメインは設定しない)。
  2. フレンドリーURLを使って、静的サイト風のURIに設定する。
  3. MODxマネージャから各サイト用のフォルダを作る。例えば、サイトA(ドメインは「DomainA.com」)用のフォルダはタイトル「サイトA」、エイリアス「SiteA」にする。
  4. エラーページやフィード等を含め、各サイト専用の全てのドキュメントは各フォルダ下にまとめる。例えば、サイトA用のドキュメントはフォルダ「サイトA」下にまとめる。
  5. 「http://DomainA.com」(ディレクトリは「/virtual/user/public_html/DomainA.com/」)へのアクセスはフォルダ「サイトA」下を表示する。
  6. 全サイトで共通するデータはチャンクやスニペットを作成し、各ドキュメントから参照して使い回す。

シンボリックリンクとmod_rewriteの設定

インストールと設定は済んでいるので、PuTTYを使ってSSHでサーバに接続し、同期元「/virtual/user/public_html/MODx」、同期先「/virtual/user/public_html/DomainA.com」としてシンボリックリンクを張ってみました。

cd /public_html
ln -sf MODx DomainA.com

「http://DomainA.com」にアクセスすると「/virtual/user/public_html/MODx/」の内容、つまりMODxのトップページが表示されます。

同期していることが確認できたので、「/virtual/user/public_html/MODx/.htaccess」に次のような記述を追加しました。

RewriteCond %{HTTP_HOST} ^DomainA\.com$ [NC]  #追加
RewriteRule (.*) index.php?q=SiteA/$1 [L,QSA]  #追加

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

再度、「http://DomainA.com」にアクセスしてみると、無事、フォルダ「サイトA」の内容が表示されました。

URIとリダイレクトの問題

ドメインとフォルダの同期はできたのですが、このままでは、ドキュメントリンクタグ([~ドキュメントID~])などによって出力されるURIが、MODxのインストール先を基準にしたものになってしまいます。また、リダイレクトもそれに準じた処理になります。ドメインごとに別サイトとして管理するには、この問題を解決しないといけないのですが、ここで行き詰まりました :x

URIとリダイレクトの問題を解決するには、ドメイン(HTTPのホスト名)に合わせて、次のような処理が必要そうです。

  • スタートページ、エラーページ等の書き換え。
  • リソースパスやファイルマネージャパス等の書き換え。
  • ドキュメント中のURIやリダイレクト処理の書き換え。

MODxフォーラムで情報収集

MODxフォーラムを探してみると、少し古い情報ですが、SubSites | XREA において1つの MODx で複数のサイトを管理したい (→解決)というスレッドがありました。さらに探して見ると、SubSites/SubDomainsというプラグインがあることがわかりました。

このSubSites/SubDomainsプラグインを導入すると、ドメインごとにスタートページやエラーページ等を書き換えることが可能になるようです。リソースパスやファイルマネージャパスの書き換えはしてくれないものの、同様に動的に書き換える処理を追加するだけで良さそうです。しかし、ドキュメント中のURIやリダイレクトについては考慮されていないので問題が残ります。

同じデータベースを参照する2つのMODxをインストール

疲れてきたので、一旦、シンボリックリンクを解除、.htaccessも元に戻して、(当初の目標とは異なるものの)別々のディレクトリにMODxをインストールする方法を試してみました。サイトA用にMODxをインストールした後、サイトB用のMODxを「Advanced Upgrade Install」モードでインストールします。このとき、データベースの設定はサイトAと同じものにします。

同じデータベースを参照する別々のMODxをインストールすることで、リソースパスやファイルマネージャパス等の問題は簡単に解決しました。スタートページやエラーページ等の書き換えは、SubSites/SubDomainsプラグインと同様の処理をするだけで済みそうです。わかりやすい方法ではあるものの、やはり、問題はドキュメント中のURIとリダイレクトです。

未解決のまま

URIとリダイレクトの問題を解決するためには、SEO Strict URLsプラグインのように動的に処理する方法でも解決できそうな気はしています。ただ、現時点のMODxはフレンドリーURL絡みであやしい点があるので、考えただけでも混乱しそうです。

いっそのこと、共通のデータを保存するためだけのMODxを設置して、リクエストに応じてXMLなどを出力させるようにすると、Web APIのようになって融通も利くと思うのですが、いまいちしっくりきません。もっと良い方法はないものでしょうか…。結局、いい方法が思いつかずにいます :x

多少の問題点はあるものの、「MODxで複数ドメイン・複数サイトを管理する方法と問題点」に複数ドメイン・複数サイトを管理する方法を書きました。

コメント (0)

この記事へのコメントはまだありません。

コメントフォーム

トラックバック (0)

この記事へのトラックバックはまだありません。

この記事のトラックバックURI
http://dxd8.com/archives/60/trackback/
この記事のURI
http://dxd8.com/archives/60/