我怎样才能学会DOCUMENT_ROOT在startup.pl下mod_perl2?
-
21-09-2019 - |
题
我想学习DOCUMENT_ROOT在startup.pl,但我可以做的最好的是学习server_root中:
use Apache2::ServerUtil ();
$server_root = Apache2::ServerUtil::server_root();
这是相当无用的。我可以设置一个环境变量与
SetPerlEnv DOCUMENT_ROOT /path/to/www
但如果可能我不喜欢额外的配置。
有没有办法通过其他方式得到DOCUMENT_ROOT?
解决方案
请参阅的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.pl
。你可以找到文档根在处理请求以及使用的Apache2 :: RequestUtil :: DOCUMENT_ROOT 。
如果您正在运行注册表脚本,而想改变DOCUMENT_ROOT
,那么你应该可以添加:
chdir $ENV{DOCUMENT_ROOT}
or die "Cannot chdir to '$ENV{DOCUMENT_ROOT}': $!";
到脚本,而不必与startup.pl
和处理程序等周围乱。
不隶属于 StackOverflow