4

startup.pl で DOCUMENT_ROOT を学びたいのですが、私にできる最善の方法は、server_root を学ぶことです。

use Apache2::ServerUtil ();
$server_root = Apache2::ServerUtil::server_root();

これはまったく役に立たない。環境変数を設定できます

SetPerlEnv DOCUMENT_ROOT /path/to/www

しかし、可能であれば、余分な構成は好きではありません。

他の方法で DOCUMENT_ROOT を取得する方法はありますか?

4

1 に答える 1

3

Apache2::ディレクティブを参照してください。たとえば、私の開発システムでは次のようになります。

use Apache2::Directive ();
my $tree = Apache2::Directive::conftree();
my $vhost = $tree->lookup(VirtualHost => 'unur.localdomain:8080');

File::Slurp::write_file "C:/bzzzt.txt", [ $vhost->{DocumentRoot}, "\n" ];

を使用して仮想ホストを指定する必要があることを発見した後C:/bzzzt.txt、内容を含むファイルを作成しました"E:/srv/unur/deploy/htdocs"

<VirtualHost unur.localdomain:8080>
...
</VirtualHost>

<VirtualHost qtau.localdomain:8080>
...
</VirtualHost>

ではなく<VirtualHost *:8080>。そうしないと、各<VirtualHost *:8080>セクションが前のセクションを上書きしていました。

これは面倒です。VirtualHost各エントリは使用済みによってキーが付けられていると思っていたでしょうServerName

もっと簡単な方法があるかどうかについては、startup.pl. ただし、で行う必要があるかどうかはわかりませんstartup.plApache2::RequestUtil::document_rootを使用して、リクエストの処理中にドキュメント ルートを見つけることもできます。

レジストリ スクリプトを実行していて、に変更したいDOCUMENT_ROOT場合は、次を追加できるはずです。

chdir $ENV{DOCUMENT_ROOT} 
    or die "Cannot chdir to '$ENV{DOCUMENT_ROOT}': $!";

startup.plハンドラーなどをいじる代わりに、スクリプトに。

于 2010-02-16T19:52:56.683 に答える