请参阅Apache2::Directive。例如,在我的开发系统上:
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.pl
. 您也可以在处理请求时使用Apache2::RequestUtil::document_root找出文档根目录。
如果您正在运行Registry scripts,并且想要更改为DOCUMENT_ROOT
,那么您应该能够添加:
chdir $ENV{DOCUMENT_ROOT}
or die "Cannot chdir to '$ENV{DOCUMENT_ROOT}': $!";
到脚本,而不必乱用startup.pl
和处理程序等。