[PHP-users 31979] Re: PHPスクリプトを使ってサブドメインを取得するには?

shin-1 @ ca2.so-net.ne.jp shin-1 @ ca2.so-net.ne.jp
2007年 4月 19日 (木) 11:16:10 JST


ML趣旨と外れた話題が続いているので、勝手にここまでのやり取りを
まとめさせていただきます。

自由に決めた test.example.com や test2.example.com がまずレンタル
サーバのIPに到達してくるためにはDNSで*.example.comをそのIPに振り
向ける必要があります。これはDNSサーバ上での設定です。
これは[PHP-users 31937]で指摘されていた点です。
nslookupやpingを使って目的のIPまで到達しているか確認できます。
(ここまでは完了しているものと思います)

次にレンタルサーバのIPにアクセスが来たとして、test.example.com
や、test2.example.comといったドメインの場合に、どのディレクトリを
DocumentRootとして処理するかはApacheのhttpd.confの設定で決まります。
(もちろんアクセスするディレクトリが違うのですから、後述の.htaccess
を置くべき場所も変わってきます)

<VirtualHost>に該当しない場合は、ApacheのデフォルトのDocumentRoot
が使用されてしまうので、そこにファイルが無ければApacheのデフォルト
ページが表示されます。これが[PHP-users 31970]の状態だと思います。

[PHP-users 31976]で指摘されているようにDirectoryIndexの指定が
違っていて、ファイルがNotFoundになっているだけかも知れないので
試すときはhttp://www.example.com/index.htmlhttp://test.example.com/index.html と、実在するはずのファイルを
URLで具体的に指定して、本当に見ているディレクトリが食い違って
NotFoundになっているのか確認したほうがいいと思います。

http://test.example.com でアクセスしたときと、http://www.example.com
でアクセスしたときに表示されるページが違うというのはtest.example.com
がVirtualHostに一致しなくてデフォルトのDocumentRootを見に行っている
からだと思われますので、[PHP-users 31978]で書かれているようにhttpd.conf
のVirtualHost設定で
 <VirtualHost 〜>
 ServerName www.example.com
 ServerAlias *.example.com
 DocumentRoot /home/example/public_html/
 </VirtualHost>
としてwww.以外のtest.などでアクセスされたときでもwww.と同じディレクトリを
DocumentRootとして動作するようにApacheのhttpd.confを設定しないといけません。

ここまできて、DocumentRootが確定したら、はじめてそのDocumentRoot以下
に置いてある.htaccessが処理されますので、個別の設定をそこで上書き
することも可能です。(.htaccessが許可されていればですね)

ですが、上記のVirtualHost設定でwww.もtest.も同じディレクトリに
アクセスされるように設定された状態なら、mod_rewriteを使わなくても
index.php上で、$_SERVER{'HTTP_HOST'}を調べることで、ブラウザから要求
されたドメイン名が何だったのかは知ることができるので、phpプログラム
内で処理を切り替える事は可能だと思います。



PHP-users メーリングリストの案内