Cuando tenemos un servidor web con Apache sobre Linux CentOS 7 y virtualhost (para tener varios sitios web en el mismo servidor), al cambiar la carpeta de uno de los sitios, no lo muestra correctamente y muestra una página de inicio por defecto de Apache. Explicamos varios métodos para solucionar este error: revisar sites-available (DocumentRoot), SELinux, cambio de punto de montaje y revisión de ficheros index del sitio.

Antecedentes, el error, escenario inicial

Cuando tenemos un servidor con Linux CentOS 7, con Apache 2.4.38 y virtualhost (la opción de Apache de poder tener varios sitios web en el mismo servidor, como explicamos en este tutorial) y necesitamos cambiar de ubicación uno de los sitios web. Al cambiarlo, incluso teniendo los permisos correctamente establecidos (como indicamos en este tutorial) y habiendo cambiado la ruta en el fichero de sites-available, muestra la página por defecto de Apache y no la del sitio web:

Antecedentes, el error, escenario inicial

Posible solución 1 para cambio de carpeta de sitio web en Apache con virtualhost: revisar sites-available DocumentRoot

Cuando cambiamos un sitio web de carpeta (de ubicación) en un Linux CentOS 7 con Apache, lo primero que debemos revisar y modificar es el fichero .conf del sitio web que habrá en la carpeta /etc/httpd/sites-available (es la carpeta por defecto salvo que se haya indicado otra). Dicha carpeta contendrá un fichero .conf para cada sitio web. Editaremos el fichero .conf correspondiente al sitio web que hemos modificado, supongamos que el sitio web es proyectoa.com, editaremos:

Modificaremos, si no lo hemos hecho ya, la nueva ruta de la carpeta que contiene los ficheros del sitio web. En todos los parámetros que aparezca la ruta antigua los cambiaremos por la nueva. Un ejemplo del contenido de este fichero:

Posible solución 1 para cambio de carpeta de sitio web en Apache con virtualhost: revisar sites-available DocumentRoot

En el documento anterior, el atributo más importante es DocumentRoot, que indica la ubicación de la carpeta del sitio web, donde estarán todos sus ficheros y carpetas (incluido el index.php o index.html).

Guardaremos los cambios en este fichero (pulsando Control + O) y cerraremos la edición pulsando Control + X. Si hemos modificado el fichero, para que se apliquen los cambios en Apache, reiniciaremos el servicio con:

Ahora debería encontrar la ruta y funcionar el sitio web. Si sigue sin funcionar pasaremos a la solución 2.

Posible solución 2 para cambio de carpeta de sitio web en Apache con virtualhost: SELinux añadir regla

Si la solución anterior no ha funcionado, en Linux CentOS 7 y similares, si tenemos habilitado SELinux, puede que esté bloqueando el acceso web a la nueva carpeta. Para comprobar si tenemos SELinux ejecutaremos el siguiente comando:

Que nos devolverá:

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

Posible solución 2 para cambio de carpeta de sitio web en Apache con virtualhost: SELinux añadir regla

En caso de tener SELinux activo (enabled), puede que esté bloqueando el acceso a la carpeta del sitio web por parte del servicio de Apache httpd, para añadir una regla que permita dicho acceso, ejecutaremos el siguiente comando:

Cambiando, lógicamente, la carpeta /www/www/proyectoa de ejemplo por la del sitio web que hemos movido. Incluso no será necesario reiniciar Apache, pero por seguridad podemos reiniarlo:

Con esto debería funcionar el sitio web.

Posible solución 3 para cambio de carpeta de sitio web en Apache con virtualhost: cambio punto montaje unidad de disco

En el caso de que hayamos movido el sitio web a otra unidad, fuera de la carpeta raíz base de Apache, puede que deje de funcionar. Una solución es, si hemos añadido el disco duro nuevo para el sitio web, «engañar» a Linux para montar el disco duro en una subcarpeta del directorio raíz. Antes de continuar con la explicación de cómo cambiar un disco duro (una partición) ya montado en una carpeta por otra carpeta, conviene revisar el siguiente artículo donde explicamos cómo añadir un nuevo disco duro a un equipo Linux:

Para cambiar la carpeta de montaje de un disco duro, siempre que no sea el del sistema y asegurándonos de que no hay otro servicio que use el nuevo disco duro, porque variará la ruta de acceso, en primer lugar haremos una copia de seguridad y un snapshot del equipo. A continuación desmontamos la unidad (no se deben perder los datos). Antes de desmontarla debemos conocer el punto de montaje, que se puede obtener con el comando:

o bien con el comando:

Posible solución 3 para cambio de carpeta de sitio web en Apache con virtualhost: cambio punto montaje unidad de disco

En nuestro caso, tenemos la unidad /www y queremos «engañar» a Linux para que dicha unidad apunte a /var/www/proyectoa, de esta forma tendremos los ficheros del sitio web dentro de la carpeta raíz base de Apache. Para ello, en primer lugar desmontaremos la unidad con:

Si nos da error porque no ha podido desmontar la unidad (a veces porque hay ficheros en uso), podemos editar el fichero /etc/fstab y comentar la línea que carga esta unidad en el arranque:

En nuestro caso, a la línea:

/dev/vgWWW/lvWWW /www xfs defaults 1 2

Le añadimos un # delante, para que no tenga efecto y guardamos los cambios (Control + O), cerrando la edición con Control + X:

#/dev/vgWWW/lvWWW /www xfs defaults 1 2

Posible solución 3 para cambio de carpeta de sitio web en Apache con virtualhost: cambio punto montaje unidad de disco

Si reiniciamos el equipo, en el próximo inicio no montará esta unidad, por lo que podremos montarla en otra carpeta, con:

Donde /dev/vgWWW/lvWWW será la ruta del dispositivo de disco duro nuevo añadido (la cambiaremos por el nuestro) y donde /var/www/proyectoa será la carpeta donde se montará de nuevo dicho disco duro.

Y para hacerla persistente, para que esté disponible cuando el equipo se enciende, volveremos a editar el fichero /etc/fstab, añadiendo una nueva línea como la siguiente:

/dev/vgWWW/lvWWW /var/www/proyectoa xfs defaults 1 2

Posible solución 3 para cambio de carpeta de sitio web en Apache con virtualhost: cambio punto montaje unidad de disco

Por supuesto, en todo este proceso, cambiaremos tanto /var/www/proyectoa, como /dev/vgWWW/lvWWW por la carpeta que queramos y por el dispositivo de disco duro nuevo que hayamos añadido al sistema.

Si todo ha sido correcto, tendremos una carpeta en /var/www/proyectoa con los ficheros de nuestro sitio web. Y como ahora se encuentra dentro de la carpeta raíz base de Apache, ya debería funcionar correctamente.

Posible solución 4 para cambio de carpeta de sitio web en Apache con virtualhost: ficheros index.php index.html permisos

A veces el problema puede solucionarse fácilmente. En una carga de un sitio web, el servidor web (en este caso Apache), buscará un fichero index.php o bien index.html o bien el indicado en el fichero virtualhost correspondiente. En caso de no encontrarlo o no tener permisos suficientes, mostrará la página por defecto y no el sitio web.

En estos casos, solucionar el problema será sencillo, sólo tendremos que revisar que tengamos el fichero de inicio del sitio web en la carpeta correcta y con los permisos correctos. En el siguiente tutorial explicamos cómo asignar los permisos para una carpeta de un sitio web en Apache de forma adecuada: