2012-03-13 11 views

risposta

46

mi si avvicinò con una soluzione intelligente, anche se ci può essere un modo migliore. Metti uno dei caratteri tra parentesi in modo che Apache lo tratterà come un modello glob, a cui è consentito abbinare zero file senza causare un errore. Ad esempio:

Include foo.con[f] 
+3

Nizza trucco. Si potrebbe anche usare '*'. Vorrei raccomandare di mettere i tuoi file conf in una cartella unike e includere in questo modo 'Include myfolder/*. Conf' –

+2

Davvero intelligente! Preferisco [f] piuttosto * perché è un po 'meno rischioso – fedmich

+0

@fedmich. Buona idea, poiché l'utilizzo di * può causare l'inclusione di più include in un ordine imprevisto che può causare un comportamento imprevisto quando l'ordine è importante. – user3183018

30

Secondo http://httpd.apache.org/docs/2.4/mod/core.html#include si potrebbe usare "IncludeOptional":

In alternativa, il seguente comando sarà solo essere ignorato in caso di file o directory mancante:

IncludeOptional conf/vhosts /*/*.conf

+4

Nota: Funziona solo in Apache 2.3.6 e successivi (in pratica 2.4+) –

+0

La cosa fondamentale di IncludeOptional è che se gli si assegna un percorso letterale senza operatori glob, sarà sicuramente un errore se non trova quel percorso (i documenti non lo rendono chiaro). In caso contrario, un percorso globulare senza corrispondenza con Includi emetterà un errore mentre uno con IncludeOptional verrà ignorato silenziosamente. –

+4

Non sembra funzionare completamente come mi aspetterei. Ho iniziato a provare questo: 'IncludeOptional/opt/data/sites/*/conf/apache.conf' Che fallisce se qualsiasi direcotry in/opt/data/sites non ha una directory 'conf'. Quindi, ho provato a creare la directory 'conf' per tutti i siti. Ma ancora senza fortuna. Come menzionato in precedenza da Russel Davis, la parte del file deve essere un jolly. Così ora ho: 'IncludeOptional/opt/data/sites/*/conf/vhost- *.conf' –

2

Ho provato lo stesso Wouter Van Vliet, ma ho ancora degli errori. Poi ho trovato this link. Ho aggiunto questo snippet al mio /etc/apache2/apache2.conf e funziona come un incantesimo!

Nota: è necessario mod_perl per questo!

Ecco il codice:

<perl> 
    use File::stat; 
    foreach $file (glob '/srv/www/vhosts/*/conf/vhost.conf') { 
     my $stat = stat($file); 
     if ($stat-&gt;uid != 0 || $stat-&gt;gid != 0) { 
      warn "$file is not owned by root:root, skipping!\n"; 
      next; 
     } 
     if ($stat-&gt;mode &amp; 0002) { 
      warn "$file is world-writable, skipping!\n"; 
      next; 
     } 
     push @Include, $file; 
    } 
</perl> 
Problemi correlati