Introducción

Buenas, en este post vamos a explicar como redireccionar direcciones dentro de apache2 y como mostrar ficheros alojados en otros directorios con varios ejemplos.

Vamos a suponer que ya tenemos instalado un sitio virtual llamado www.mapeo.com y su DocumentRoot es /srv/mapeo.

Opciones de directorios

Cuando indicamos la configuración de un servidor servidor por apache, por ejemplo con la directiva Directory, podemos indicar algunas opciones con la directiva Options. Algunas de las opciones que podemos indicar son las siguientes:

  • All: Se pondrán todas las options menos MultiViews.
  • FollowSymLinks: Se seguirán los enlaces simbólicos.
  • Indexes: Si no hay Index.html o similares, devolverá una lista formateada del directorio.
  • MultiViews: Se permite el uso de contenido negociado, es decir, el servidor elige el mejor contenido a mostrar dependiendo de la configuración del navegador, por ejemplo, el idioma.
  • SymLinksIfOwnerMatch: Se seguirán los enlaces simbólicos cuando el propietario del enlace y del archivo o directorio sea el mismo.
  • ExecCGI: Se permite la ejecución de scripts CGI usando el mod_cgi.

Redireccionar www.mapeo.com

Vamos a hacer un redirect para que cada vez que se acceda a www.mapeo.com nos muestre www.mapeo.com/principal. Para ello vamos al archivo de configuración de nuestro VirtualHost, /etc/apache2/sites-available/mapeo.conf y lo dejamos de la siguiente forma:

<VirtualHost *:80>
        ServerName www.mapeo.com
        DocumentRoot /srv/mapeo/
        Redirect "/index.html" "/principal/"
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Comprobamos que funciona correctamente:

principal

Cambiando opciones de directorio

Para que no se muestren la lista de los ficheros, que no se permitan los enlaces simbólicos y no se permita la negociación de contenido, añadiremos lo siguiente al fichero /etc/apache2/sites-available:

<Directory /srv/mapeo/principal>
        Options -Indexes -FollowSymLinks -MultiViews
</Directory>

Mostrar contenido de otro directorio mediante enlace simbólico

Para que nos muestre el contenido de /home/vagrant/doc cada vez que accedamos a www.mapeo.com/principal/documentos crearemos un enlace simbólico, para ello:

mkdir /home/vagrant/doc
ln -s /home/vagrant/doc /srv/mapeo/principal/documentos

También tendremos que modificar el fichero /etc/apache2/sites-available/mapeo.conf al cuál le añadiremos las siguientes options en nuestro directorio principal:

<Directory /srv/mapeo/principal>
        Options +Indexes +SymLinksIfOwnerMatch -FollowSymLinks -MultiViews
</Directory>

La opción SymLinksIfOwnerMatch permitirá el seguimiento de los enlaces sólo si el creador del enlace es el mismo usuario que el del directorio o fichero destino. Vamos a mostrar que pasa si tenemos el fichero con otro propietario:

root@serverweb:/srv/mapeo/principal# ls -la
total 20
drwxr-xr-x 2 www-data www-data  4096 Oct 21 18:49 .
drwxr-xr-x 3 www-data www-data  4096 Oct 20 15:39 ..
lrwxrwxrwx 1 www-data www-data    17 Oct 21 18:49 documentos -> /home/vagrant/doc
-rw-r--r-- 1 www-data www-data 10692 Oct 20 16:42 index.html

Como vemos el propietario es el usuario www-data, si nos vamos a la página documentos de nuestro servidor no nos mostrará nada porque el propietario de /home/vagrant/doc es el usuario vagrant:

otrousuario

Pero en cambio si cambiamos el propietario del enlace simbólico al usuario vagrant:

root@serverweb:/srv/mapeo/principal# chown -R vagrant:vagrant documentos
root@serverweb:/srv/mapeo/principal# ls -la
total 20
drwxr-xr-x 2 www-data www-data  4096 Oct 21 18:49 .
drwxr-xr-x 3 www-data www-data  4096 Oct 20 15:39 ..
lrwxrwxrwx 1 vagrant  vagrant     17 Oct 21 18:49 documentos -> /home/vagrant/doc
-rw-r--r-- 1 www-data www-data 10692 Oct 20 16:42 index.html

Nos dará la información que queremos:

usuariocorrecto

Páginas de error personalizadas

Para poder hacer páginas de error personalizadas vamos a crear un directorio en el cuál las vamos a guardar:

mkdir /srv/error

Y crearemos dos html para los errores 403 y 404. Tendremos que dar permisos a ese directorio en el fichero de configuración de nuestro VirtualHost:

nano /etc/apache2/sites-available/mapeo.conf

Añadimos las siguientes líneas:

<Directory /srv/error>
                Options FollowSymLinks
                AllowOverride None
                Require all granted
</Directory>

Y con la directiva ErrorDocument activaremos esos dos html en el mismo fichero anterior, añadiendo lo siguiente:

ErrorDocument 404 /srv/error/err404.html
ErrorDocument 403 /srv/error/err403.html

Comprobamos con página no encontrada:

noencontrada

Y con página de acceso denegado:

denegado