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を参照して動作するスクリプトの挙動が異なってしまうため質問いたしました。
Apache の環境変数 - Apache HTTP サーバ
環境を操作するディレクティブを使って標準 CGI 変数を上書きしたり変更したりすることはできません。
それぞれの DOCUMENT_ROOT の値は正しいし(3に付いては多少不思議に思うが)
標準 CGI 変数として定義されているので他の方法では変更不能。
mod_cgi 自体を改変するという事も出来無くはないだろうが複雑な割にメリットが少ない。
DOCUMENT_ROOT 以外の変数を利用するのが正攻法だと思うが。
やはりそうなってしまいますか・・・
管理するドメインが多くなってしまったため、VirtualHostから(2)(3)に変えたところ
phpmyadminなどが正常に動かなくなってしまい、原因を詰めていったところDOCUMENT_ROOTの違いにあることがわかりました。
やはり楽しようとせず、VirtualHostのままがよさそうですね。