XREA.COMで.htaccessだけでバーチャルドメイン(ホスト)を実現する方法

Apache, ASP, さくらインターネット, XREA.COM

09:00:40, by admin Email , 265 words, 15967 views   Japanese (JP) del.icio.us

これならどのサーバでもいけそうだな。

(ノ・・)ン。。。。。。(((●コロコロッ

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"]);

を付け加える。



Trackback address for this post:

http://hain.jp/htsrv/trackback.php/152

Comments, Trackbacks:

No Comments/Trackbacks for this post yet...

Leave a comment:

Your email address will not be displayed on this site.
Your URL will be displayed.

Allowed XHTML tags: <p, ul, ol, li, dl, dt, dd, address, blockquote, ins, del, span, bdo, br, em, strong, dfn, code, samp, kdb, var, cite, abbr, acronym, q, sub, sup, tt, i, b, big, small>
(Line breaks become <br />)
(Set cookies for name, email and url)
(Allow users to contact you through a message form (your email will NOT be displayed.))
This is a captcha-picture. It is used to prevent mass-access by robots.

Please enter the characters from the image above. (case insensitive)

powered by b2evolution

shinobi

Neighbors
Relative
Favorites

極論istの技術屋を始めて早幾年。 流れの速い業界の波にもまれながらも精一杯生きている様をとくとごらんあれ。

Archives
スポンサー

Latest bookmark
Search

Categories

Who's Online?
Misc
Syndicate this blog XML

Valid XHTML 1.0! Valid CSS! Valid RSS 2.0! Valid Atom 1.0!