CPIサーバーで、複数のサイトをオトクに管理しよう(mod_rewrite振り分け方法)


CPIサーバーの
共用型サーバーACE01では、1契約で複数サイトを運営することができます。

1サイト運営して3,800 円(税別)、10サイト運営しても3,800 円(税別)、100サイト運営しても3,800 円(税別)です。

 

沢山サイトを運営すればするほどオトクに使うことができます。
今回の記事では、CPIサーバーで複数サイトを運営するための方法をご紹介いたします。

 

複数サイトを運営するための方法

 

複数サイトを運営するための方法は2種類あります。

1つ目が、「マルチドメイン」を利用する方法です。
2つ目が、「ドメインエイリアス」を利用する方法です。

マルチドメインは、主契約のWeb領域とは別のサーバーあるいは、別階層にWeb領域が構築されます。
一方ドメインエイリアスは、主契約のWeb領域と同じ階層に、違うドメインを割り当てます。

 

特別な理由が無い限り、サイトを追加する場合は「マルチドメイン」がオススメです。

マルチドメインを申し込みますと、サーバーを操作するコントロールパネルを含めて、別環境のWebサーバーが1つできます。
そこで従来通りの制作をしていただければと思います。

 

上記で特別な理由が無い限りと書かせていただきました。では「ドメインエイリアス」はどのような場合に使われるのでしょうか。

  • 他のドメインで使用しているファイル(HTMLや、CSSなど)を相対パスで取得したい
  • Database(MySQLなど)を複数ドメイン間で共通に利用したい

「ドメインエイリアス」は、同じWeb領域内に複数のドメインを管理します。違うドメインでもデータのやり取りは簡単に行えますが、違うドメイン名で1つの領域にアクセスしてきますので、ドメイン名を判定してユーザーを振り分ける簡単なプログラムを書く必要があります。

例では「ユーザーA」が「example.com」にアクセスし、 振り分け処理によって「example」ディレクトリのコンテンツを結果として受け取っています。

 

ドメインエイリアス時の振り分け方法

 

ではドメインエイリアスを利用する場合の設定方法をご紹介いたします。
ドメインエイリアスでは上記でも簡単にお伝えしましたが、下記の特徴があります。

・データのやり取りがWWW経由ではなく、階層を指定して相対的に行うことができる
・MySQLなどのデータベースが共有できる

これらの特徴がありますが、振り分けの処理を行う必要がありますので、サイトを増やす場合は、基本マルチドメインを申し込みください。

 

違うドメインで入ってきた場合の振り分け方法

 

apacheの「mod_rewrite」機能を使い、振り分けを行います。
mod_rewriteは、「.htaccess」に記述を行います。

 

振り分けは下記の通り、行います。
今回ご紹介させていただく転送方法は、「/www/html」には「.htaccess」ファイル以外のファイルが存在しない場合です。
「/www/html」にファイルが存在する場合などは、記述方法が多少異なります。

 

  1. 「.htaccess」ファイルをWebルートフォルダに作成ください。

    CPIの場合は、下記階層です。
    「/usr/home/aaXXXXXXXX/html/.htaccess」

    aaXXXXXXXは、お客様ごとに変わります。
     

  2. .htaccessを開き、振り分けの設定(mod_rewrite)をします。
     

    # enables mod_rewrite
    Options +SymlinksIfOwnerMatch
    RewriteEngine on
    
    # settings for test.example.com
    RewriteCond %{HTTP_HOST} =test.example.com
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /test/$1 [L,QSA]
    

    RewriteCond %{HTTP_HOST} =」 は、リクエストのドメイン名を比較します。上記の場合ですと、test.example.comだった場合、次のRewriteCond(条件)チェックに移ります。

    RewriteCond %{REQUEST_FILENAME} !-f」では、リクエストしたURLのファイルが無い場合です。
    もし「/html」階層にファイルが存在し、「/html」以下のファイル存在有無に関わらず、「/test」の階層を返したい場合は、こちらの行は削除ください。

    最後に「RewriteRule ^(.*)$ /test/$1 [L,QSA]」にて、testフォルダに設置されたコンテンツを返しています。

    (例)
    http://test.example.com/test.html」 にアクセスすると
    「/usr/home/aaXXXXXXX/html/test/test.html」をユーザーに返します。

    このように、その他のドメインも設定を行います。
     

  3. http://example.com/test/test.html」でアクセスしたユーザーの対応について

    example.comはRewrite設定していませんので、何も記述をしないと、このURLのまま/test/test.htmlを返答します。
    これを、http://test-example.com/test.htmlにリダイレクトすることも可能です。
     

    #settings for test-example.com/test not allow
    RewriteCond %{HTTP_HOST} =test-example.com
    RewriteCond %{REQUEST_URI} ^/test
    RewriteRule ^test/(.*)$ http://test-example.com/$1 [R=301,L]
    
    
  4. 特定ディレクトリに制限をかける

    mod_rewriteを応用することで、CMSを導入した階層などにアクセス制限をかけ、さらにリダイレクトすることもできます。

    (例)admin階層以下にはIPアドレスの制限をかけます。

    #settings for example.com/admin not allow
    RewriteCond %{HTTP_HOST} =example.com
    RewriteCond %{REQUEST_URI} ^/admin
    RewriteCond %{REMOTE_ADDR} !^172.1.1.0$
    RewriteRule ^admin/(.*)$ http://test.example.com/$1 [R=301,L]
    

    (例)
    http://example.com/admin/admin.php にアクセスしたユーザーは、IPアドレスをチェックし、指定のIPアドレスだった場合、「/admin」にアクセスすることができます。
    指定以外のIPアドレスだった場合は 「http://test.example.com/admin.php」にリダイレクトされます。

 

以上、ドメインエイリアスを利用した場合の、アクセス振り分け方法でした。

 

関連タグ: 

この記事をシェアする:

Author
この記事を書いた人:阿部 正幸

KDDIウェブコミュニケーションズ
クラウドホスティング事業本部 エバンジェリスト

CPIスタッフブログ編集長。ACE01,SmartReleaseをリリース後、現職の「エバンジェリスト」として、web制作に関する様々なイベントに登場

Line@登録よろしくお願いします

Web制作に関する情報や、CPIノベルティのプレゼント、サーバーの無償提供などを定期的に発信しています。
ぜひ、登録ください。