これならどのサーバでもいけそうだな。
(ノ・・)ン。。。。。。(((●コロコロッ
XREA.COMを使い始めてn日。
基本仕様には結構満足しているので、
どんどんこっちに移行しようかと思っている所存。
すでに有料のPlusサービスを利用し始めている。
最初にやった内容はこちらを見て欲しい。
XREA.COMを使う時最初にやったこと
なんとからないかと思っているのが、
ドメイン登録制限。
まぁ、どのサーバでもそうなんだろうけど、
ドメイン登録数上限は決まっている。
さくらインターネットは20個。
XREA.COMも20個らしい。
メインドメインは仕方がないが、
サブドメインはなんとか動的に出来ない物か。
( ̄-  ̄ ) ウーン
リライト(・ω・)カナ?
けど.htaccessだけでできるもんなんかなぁ。
ちょっとやってみよう。
結論だけ先に言うと、
.htaccessの設定はこんな感じになった。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.hain\.jp$
RewriteRule ^(.*)$ %{HTTP_HOST}|$1| [C]
RewriteRule ^([^.]+)\.hain\.jp\|(.*)\|.*$ /$1/$2
使いながら徐々に修正することにする。
なので動かなくても文句言んでくれ。
あと多少小細工も必要。
その辺は続きを読んでくり。
[More:]
調べるとこんな記事に当たった。
サブドメインの動的な作成
http://sb.xrea.com/archive/index.php/t-10907.html
読んでいくとなんかチグハグ食い違ったやりとりしている印象。
結局は諦めたという結論だった。
ただ、mod_rewriteは入っているんだなと言うのはわかったから良しとしよう。
以下の説明は設定したいドメインをhain.jpとして、
サブドメインtest.hain.jpやdev.hain.jpのアクセスを、
それぞれ/test/, /devにアクセスするようにしている。
自身のドメインと入れ替えて読むように。
ディレクトリ構成はこんな感じ
/virtual/hain/public_html/default.hain.jp/以下
test/ ←http://test.hain.jp/のアクセス
dev/ ←http://dev.hain.jp/のアクセス
- ●管理画面のドメイン設定
管理画面にログイン後、[ドメインウェブ]をクリック。
ドメインに[default.ドメイン名]と記述して[ドメイン設定]
注意書きにこうある。
※ CATCH ALL機能対応のサブドメイン「default」を指定されますと、設定されていないサブドメインを一括受け入れできます。同じサブドメイン内で一番最後に設定してください。(例:default.example.com は abc.example.comやxyz.example.comを兼ねます)
サブドメインをdefaultとすると、
サブドメインのアクセスを全部一つで受けてくれるらしい。
ワイルドカード(*アスタリスク)みたいなもんか。
- ●サブドメイン用のディレクトリ作成
すべてのサブドメインからのアクセスを引き受けるディレクトリを作成する。
ファイルマネージャからpublic_html以下にdefault.hain.jpというディレクトリを作る。
シェルが使える人はこんな感じか。
$ cd public_html
$ mkdir default.hain.jp
$ cd default.hain.jp
$ touch index.html
- ●.htaccess作成
Rewriteを.htaccess経由で利用する。
ファイルマネージャからdefault.hain.jp以下に移動し、
ファイル名.htaccessというファイルを作成する。
ファイルの中身は
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.hain\.jp$
RewriteRule ^(.*)$ %{HTTP_HOST}|$1| [C]
RewriteRule ^([^.]+)\.hain\.jp\|(.*)\|.*$ /$1/$2
シェルが使える人は
$ cat > .htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.hain\.jp$
RewriteRule ^(.*)$ %{HTTP_HOST}|$1| [C]
RewriteRule ^([^.]+)\.hain\.jp\|(.*)\|.*$ /$1/$2
- ●サブドメイン用のディレクトリを作成
下記のようにしたいので、
それ用のディレクトリを作成。
ファイルマネージャーからtest, devというディレクトリを作成する。
そのディレクトリ直下に.htaccessを改めて作る。
中身は
RewriteEngine On
RewriteCond %{HTTP_HOST} !^test\.hain\.jp$
RewriteRule .* - [F]
シェルが使える人は
$ mkdir test
$ cd test
$ cat > .htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} !^test\.hain\.jp$
RewriteRule .* - [F]
$ touch index.html
RewriteCondの行はアクセスしたいホスト名に変更するように。
最終的に構成はこうなる
/virtual/hain/public_html/default.hain.jp/
.htaccess
index.html
test/
test/.htaccess
test/index.html
dev/
dev/.htaccess
dev/index.html
これで一応動いてるっぽいので、
しばらく様子を見るとしよう。
Rewrite記述の'|(パイプ、縦線)'は無くてもいけるはずなのだが、
これを外すとcssとか2階層目にディレクトリとかを作った途端、
パスがおかしくなる。
多分mod_rewrite上で'/(スラッシュ)'の扱いが不安定なんだと思う。
スラッシュ以外なら何の記号でも良いので、
不便にならない物を使うこと。
サブドメイン用の階層ディレクトリのトップで改めて.htaccessを作る理由は、
Rewrite記述だけだと無限ループが起こってしまうのを防ぐため。
(Internal Server Errorがでる。)
もっと良い方法があるんだろうけど、
今はこれしか思いつかなかった。
暇な人はRewriteCondとかで無限ループを押さえる方法を考えてくり。
問題点:
http://test.hain.jp/devとアクセスすると、
http://dev.hain.jpの内容が表示されてしまう。
ディレクトリが存在するからそっちが優先される・・・ということだと思うのだが、
XREA.COM以外のApache1.3サーバではこの問題は出ない。
なんでやろ。。
二階層目で特定ホスト以外はForbiddenを出すことで解決。
アプリケーションによってはちゃんと動かない場合がある。
原因はSCRIPT_NAMEなどのパラメータが、
DocumentRootからたどったファイルの位置を指しているからである。
そう言う場合は多少SERVER変数, ENV変数を変更する必要がある。
PHPだとPHP_SELFやSCRIPT_NAMEなどのSERVER, ENV変数。
例えば、SymfonyではSCRIPT_NAMEが使用されるので、
index.phpの先頭部分に
if( preg_match( "!^/test!i", $_SERVER["SCRIPT_NAME"] ) )
$_SERVER["SCRIPT_NAME"] = preg_replace("!^/test(.*)!i", '$1', $_SERVER["SCRIPT_NAME"]);
を付け加える。