Estoy tratando de configurar un servidor Apache 2 en mi máquina Arch Linux. Todo funciona muy bien hasta ahora, incluidos https y php, pero ahora quiero cambiar DocumentRoot
el valor predeterminado /srv/http
a /var/www/foo
. He cambiado DocumentRoot /srv/http
y <Directory "/srv/http">
a DocumentRoot /var/www/foo
y <Directory "/var/www/foo">
, respectivamente, y vuelve a cargar la configuración utilizando systemctl restart httpd
. Ahora recibo 403 errores al intentar acceder https://localhost
o cualquier cosa dentro.
Una investigación adicional resulta que cambiar la <Directory ...>
declaración tiene un efecto, pero cambiar la DocumentRoot
no. Cuando me puse Require all granted
en <Directory />
eliminar estos errores 403, resulta que Apache todavía está tratando de servir a los documentos de /srv/http
. Por ejemplo, pongo un archivo que contiene prueba.php <?php echo exec('pwd'); ?>
en tanto /srv/http/
y /var/www/foo/
y el acceso a https://localhost/test.php
las salidas /srv/http
de mi navegador. Intentar acceder a los documentos ubicados en, /var/www/foo
pero no en, /srv/http
dará como resultado errores 404.
¿Por qué sigue usando Apache /srv/http
? He cambiado absolutamente cada ocurrencia de /srv/http
que /var/www/foo
en /etc/httpd/conf/httpd.conf
y reiniciar Apache varias veces, pero mi raíz del documento simplemente no va a cambiar. Según el artículo de Apache Arch Wiki, he hecho todo lo necesario.
Por supuesto, podría simplemente hacer un enlace simbólico /srv/http
a la ubicación deseada, pero esa no parece ser la forma correcta de hacerlo.
Aquí están las partes de mi httpd.config
que creo que podrían 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>
Por supuesto, /var/www/foo
sí y todos los directorios principales tienen al menos 755
permisos.
fuente
/srv/http
izquierda.Include conf/extra/httpd-vhosts.conf
, vea Cómo configurar los hosts virtuales de Apache en Arch Linux , para que pueda verificar si esa línea existe y si existe o no está comentado enhttpd.conf
. Si no está comentado, puede poner un#
al principio de la línea para que sea un comentario y reiniciar Apache para ver si eso hace la diferencia.apachectl -S
. Eso también muestra el valor predeterminado paraDocumentRoot
, pero el valor que veDocumentRoot
allí no es necesariamente el que se usalocalhost
si unaVirtualHost
sección está vigente dentrohttpd.conf
o desde unhttpd-vhosts.conf
archivo externo .vhosts.conf
no estaba incluido. Pero investigando más en esa dirección, descubrí quehttpd-ssl.conf
contenía una configuración de host virtual que usa explícitamente/srv/http
. También cambié eso/var/www/foo
, ¡y ahora todo funciona! ¡Gracias!