См. 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
и обработчиков и т.д.
CGI, mod_perl, что-то еще? – djc
App :: Info :: HTTPD :: Apache - это взлом, он читает конфигурационный файл Apache. Это небезопасно. Есть ли интроспективное решение? – codeholic