Estoy en arch linux por lo que el document root es /srv/http. He creado varios archivos para cada dominio/subdominios (vhost) para tener la configuración bien organizada y poder activar/desactivar facilmente cada uno desde el httpd.conf. El archivo conf/extra/httpd-vhosts.conf solo tiene un bloque * con un documentroot a /srv/http/default (por si accedes usando los name servers que se muestre la página default).
El problema es que todos los dominios/subdominios llevan al document root de apache, que es /srv/http, en lugar del document root del dominio, especificado en cada bloque <VirtualHosts> correspondiente. Por lo que cuando accedo con el dominio o subdominio, se muestra /srv/http y puedo navegar por todas las carpetas de cada dominio/subdominio e incluso las carpetas que deberían ser privadas, como framework o files (desde la barra escribiendo los nombres).
La configuración de apache importante es la siguiente:
Código
DocumentRoot "/srv/http" <Directory "/srv/http"> Options -Indexes +FollowSymLinks AllowOverride None Require all granted </Directory> ... # Virtual hosts Include conf/extra/httpd-vhosts.conf # Enabled Vhosts Include conf/vhosts/domain.dom Include conf/vhosts/sub1.domain.dom Include conf/vhosts/sub2.domain.dom
Si comento #Require all granted o lo cambio a all denied da error 403... ¿como hago para que no sea accesible el documentroot mediante el navegador?
Asi són los bloques <VirtualHosts>, uno para el puerto 80 (http) y otro exactamente igual, incluyendo la configuración SSL, para el puerto 443 (https):
Código
# conf/extra/httpd-vhosts.conf <VirtualHost *> ServerName default.localhost DocumentRoot "/srv/http/default" </VirtualHost> # conf/vhosts/domain.dom <VirtualHost domain:80> ### Igual que abajo pero sin la configuración SSL </VirtualHost> <VirtualHost domain.com:443> ServerAdmin webmaster@domain.com DocumentRoot "/srv/http/domain.com/www" ServerName domain.com:443 ServerAlias www.domain.com:443 Protocols h2 h2c <Directory "/srv/http/domain.com/www"> Require all granted <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^index\.php$ - [L] RewriteRule . index.php [L] </IfModule> </Directory> <IfModule dir_module> DirectoryIndex index.php </IfModule> #SSLEngine on #SSLCertificateFile "/etc/httpd/conf/apache.crt" #SSLCertificateKeyFile "/etc/httpd/conf/apache.key" ErrorLog "/var/log/httpd/domain.com-error_log" CustomLog "/var/log/httpd/domain.com-access_log" common </VirtualHost>
Gracias.