Domanda

Voglio imparare DOCUMENT_ROOT in startup.pl, ma il meglio che posso fare è quello di imparare server_root:

use Apache2::ServerUtil ();
$server_root = Apache2::ServerUtil::server_root();

che è del tutto inutile. Posso impostare una variabile d'ambiente con

SetPerlEnv DOCUMENT_ROOT /path/to/www

, ma non mi piace la configurazione in più, se possibile.

C'è un modo per ottenere DOCUMENT_ROOT con altri mezzi?

È stato utile?

Soluzione

Apache2 :: direttiva . Per esempio, sul mio sistema di sviluppo:

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" ];

creato un file C:/bzzzt.txt con il contenuto "E:/srv/unur/deploy/htdocs" dopo ho scoperto che dovevo specificare il mio host virtuali utilizzando

<VirtualHost unur.localdomain:8080>
...
</VirtualHost>

<VirtualHost qtau.localdomain:8080>
...
</VirtualHost>

piuttosto che <VirtualHost *:8080>. In caso contrario, ogni sezione è stata <VirtualHost *:8080> sovrascrivendo la precedente.

Questo è fastidioso. Avrei pensato ogni voce VirtualHost sarebbe stato digitato dal ServerName utilizzato.

Per quanto riguarda se c'è un modo più semplice, temo che non v'è, se si vuole fare questo in startup.pl. Tuttavia, non sono sicuro se è necessario farlo in startup.pl. Si può scoprire la radice del documento durante l'elaborazione di una richiesta così utilizzando Apache2 :: :: RequestUtil document_root .

Se si esegue script del Registro di sistema , e vogliono cambiare per DOCUMENT_ROOT, allora si dovrebbe essere in grado di aggiungere:

chdir $ENV{DOCUMENT_ROOT} 
    or die "Cannot chdir to '$ENV{DOCUMENT_ROOT}': $!";

allo script, invece di dover pasticciare con startup.pl e gestori, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top