Estou tentando configurar um servidor Apache 2 em minha máquina Arch Linux. Tudo funciona muito bem até agora, incluindo https e php, mas agora quero alterar o DocumentRoot do padrão /srv/http para /var/www/foo . Alterei DocumentRoot /srv/http e <Directory "/srv/http"> para DocumentRoot /var/www/foo e <Directory "/var/www/foo"> respectivamente e recarreguei a configuração usando systemctl restart httpd . Agora estou recebendo erros 403 ao tentar acessar https://localhost ou qualquer coisa dentro.
Outras investigações mostram que alterar a declaração <Directory ...> tem um efeito, mas alterar o DocumentRoot não. Quando eu defino Require all granted em <Directory /> para eliminar esses erros 403, acontece que o Apache ainda está tentando servir documentos de /srv/http . Por exemplo, eu coloquei um arquivo test.php contendo <?php echo exec('pwd'); ?> em /srv/http/ e /var/www/foo/ e acessando https://localhost/test.php outputs /srv/http em meu navegador. Tentar acessar documentos localizados em /var/www/foo , mas não em /srv/http , resultará em erros 404.
Por que o Apache ainda está usando /srv/http ? Eu mudei absolutamente todas as ocorrências de /srv/http para /var/www/foo em /etc/httpd/conf/httpd.conf e reiniciei o Apache várias vezes, mas a raiz do meu documento simplesmente não muda. De acordo com o artigo do Apache Arch Wiki, eu fiz tudo que é necessário.
Eu poderia, claro, apenas ligar simbolicamente /srv/http ao local desejado, mas isso não parece ser o caminho correto.
Aqui estão as partes do meu httpd.config que eu acho que podem ser relevantes:
<Directory />
AllowOverride none
Require all granted # Will of course change to denied again once everything works
</Directory>
DocumentRoot "/var/www/foo"
<Directory "/var/www/foo">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
É claro que /var/www/foo e todos os diretórios pai têm pelo menos 755 de permissões.