Apacheのバーチャルホスト設定と環境変数について質問いたします。

http://sub.example.com  を /home/exmaple.com/plublic_html/sub/ に割り当てる際のバーチャルホスト設定として、下記の3種の方法を試したところ、それぞれ異なる環境変数のDOCUMENT_ROOTを返しました。

(1) VirtualHost
<VirtualHost *>
DocumentRoot /home/example.com/public_html/sub/
ServerName sub.exmaple.com
</VirtualHost>

結果 /home/example.com/public_html/sub/

(2) mod_rewrite
<VirtualHost *>
DocumentRoot /home/example.com/public_html/
ServerName example.com
ServerAlias *.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule (.*) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.example\.com(.*) /home/example\.com/public_html/$1/$2 [L]
</VirtualHost>

結果 /home/example.com/public_html/

(3) mod_vhost_alias
UseCanonicalName Off
VirtualDocumentRoot /home/%2+/public_html/%1

結果 /home

そこで質問なのですが、(2)または(3)のドキュメントルートを、(1)の状態で扱うようにしたい場合はどのような設定が必要になりますでしょうか。
環境変数のDOCUMENT_ROOTを参照して動作するスクリプトの挙動が異なってしまうため質問いたしました。

回答の条件
  • 1人2回まで
  • 登録:2009/10/15 19:29:09
  • 終了:2009/10/22 19:30:03

ベストアンサー

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402009/10/16 11:21:05

ポイント60pt

Apache の環境変数 - Apache HTTP サーバ

環境を操作するディレクティブを使って標準 CGI 変数を上書きしたり変更したりすることはできません。

それぞれの DOCUMENT_ROOT の値は正しいし(3に付いては多少不思議に思うが)

標準 CGI 変数として定義されているので他の方法では変更不能。

mod_cgi 自体を改変するという事も出来無くはないだろうが複雑な割にメリットが少ない。


DOCUMENT_ROOT 以外の変数を利用するのが正攻法だと思うが。

id:cannabis_c4

やはりそうなってしまいますか・・・

管理するドメインが多くなってしまったため、VirtualHostから(2)(3)に変えたところ

phpmyadminなどが正常に動かなくなってしまい、原因を詰めていったところDOCUMENT_ROOTの違いにあることがわかりました。

やはり楽しようとせず、VirtualHostのままがよさそうですね。

2009/10/16 14:45:25
  • id:b-wind
    >管理するドメインが多くなってしまったため、VirtualHostから(2)(3)に変えたところ
    まぁそんなところだろうと思ったし、VirtualDocumentRoot が使えないのは痛いが、
    VirtualHost の定義部分だけ別ファイルにして Include 、
    定義部分はスクリプトによる自動生成としておけば手間は減らせると思う。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません