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::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和处理程序等。

于 2010-02-16T19:52:56.683 回答