2012-03-13 15 views

Respuesta

46

me ocurrió una solución inteligente, aunque puede haber una mejor manera. Ponga uno de los caracteres entre corchetes para que Apache lo trate como un patrón global, que permite emparejar cero archivos sin causar un error. Por ejemplo:

Include foo.con[f] 
+3

Buen truco. También puedes usar '*'. Yo recomendaría poner sus archivos conf en una carpeta similar e incluir así 'Include myfolder/*. Conf' –

+2

¡Muy inteligente! Prefiero [f] más bien * ya que es un poco menos arriesgado – fedmich

+0

@fedmich. Es una buena idea, ya que el uso de * puede hacer que varias inclusiones se incluyan en una orden inesperada que puede causar un comportamiento inesperado cuando el orden es importante. – user3183018

30

Según http://httpd.apache.org/docs/2.4/mod/core.html#include usted podría utilizar "IncludeOptional":

Alternativamente, el siguiente comando solo se tendrá en cuenta en el caso de los archivos o directorios que faltan:

IncludeOptional conf/VHosts /*/*.conf

+4

Nota: Esto solo funciona en Apache 2.3.6 y más reciente (efectivamente 2.4+) –

+0

Lo principal de IncludeOptional es que si le das una ruta literal sin operadores globales, definitivamente va a haber un error si no encuentra esa ruta (los documentos no lo dejan claro). De lo contrario, una ruta globular incomparable con Incluir producirá un error, mientras que una con IncludeOptional se ignorará en silencio. –

+4

Parece que no funciona del todo como era de esperar. Empecé probando esto: 'IncludeOptional/opt/data/sites/*/conf/apache.conf' Que falla si algún directorio en/opt/data/sites no tiene un directorio 'conf'. Entonces, traté de crear el directorio 'conf' para todos los sitios. Pero todavía no hay suerte. Como se mencionó anteriormente por Russel Davis, la parte del archivo debe ser un comodín. Así que ahora tengo: 'IncludeOptional/opt/data/sites/*/conf/vhost- *.conf' –

2

Intenté lo mismo que Wouter Van Vliet, pero sigo teniendo errores. Luego encontré this link. Agregué este fragmento a mi /etc/apache2/apache2.conf y funciona como un encanto!

Nota: Necesita mod_perl para él!

Aquí está el código:

<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> 
Cuestiones relacionadas