我想在startup.pl中学习DOCUMENT_ROOT,但我能做的最好的事情是学习server_root:
use Apache2::ServerUtil ();
$server_root = Apache2::ServerUtil::server_root();
这是没用的。我可以用
设置一个环境变量SetPerlEnv DOCUMENT_ROOT /path/to/www
但如果可能,我不喜欢额外的配置。
有没有办法通过其他方式获取DOCUMENT_ROOT?
答案 0 :(得分: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
和处理程序等。