La directiva Alias permite asociar una URL a cualquier fichero o directorio del sistema de ficheros completo, por lo que nos dará acceso a recursos que no estén dentro de DocumentRoot.
Directiva Alias
Sintaxis: Alias url-a-directorio ruta-a-fichero|ruta-a-directorio
Contexto: server config, virtual host, directory
La url-a-directorio es sensible a mayúsculas y minúsculas, independientemente de que el sistema de ficheros lo sea o no, y si una URL comienza por url-a-directorio, ese trozo será sustituido por el segundo argumento de Alias.
Alias "/formularios" "/home/secretario/formularios"
De esta forma, la petición http://maquina/formularios/pago.pdf hará que Apache responda con el fichero /home/secretario/formularios/pago.pdf. Se asume siempre que url-a-directorio es una ruta completa, por lo tanto, en una ruta como http://maquina/formulariospago.pdf no casaría con el alias anterior, ya que la ruta que hay que coincidir con el alias es la ruta /.
Si url-a-directorio finaliza con el carácter /, entonces ruta-a-directorio también tiene que finalizar con le mismo carácter, pues si lo hacemos así:
Alias "/formularios/" "/home/secretario/formularios"
para la URL anterior, http://maquina/formularios/pago.pdf, se respondería con /home/secretario/formulariospago.pdf, y esto daría error. Por lo tanto, lo correcto sería:
Alias "/formularios/" "/home/secretario/formularios/"
Pero el problema de hacerlo así, es que la URL http://formularios no casaría con el alias, pues le falta un carácter / para que se dé la coincidencia.
Por otro lado, al tener que acceder al sistema de ficheros fuera de DocumentRoot, es necesario conceder permiso de acceso al destino del alias, pues en el fichero de configuración apache2.conf tenemos lo siguiente:
...
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
...
por lo que tendremos que hacer lo siguiente como mínimo en el contexto que corresponda:
Alias "/formularios" "/home/secretario/formularios"
<Directory "/home/secretario/formularios">
Require all granted
</Directory>
Directiva AliasMatch
Sintaxis: AliasMatch expresión-regular ruta-a-fichero|ruta-a-directorio
Contexto: server config, virtual host
Esta directiva funciona prácticamente igual que Alias, pero usa expresiones regulares para identificar el recurso a mapear, y en este punto, cabe indicar que las coincidencias de las partes de las expresiones regulares que vayan entre paréntesis, pueden utilizarse para describir el segundo argumento, utilizando $1, $2, ... y $9, por orden de aparición de izquierda a derecha. Por ejemplo:
AliasMatch "^/icons(/|$)(.*)" "/usr/local/apache/icons$1$2"
Otra diferencia es que Alias copiará automáticamente cualquier parte adicional del URL, más allá de la parte que coincida, al final de la ruta del segundo argumento, mientras que AliasMatch lo que hace es sustituir completamente la URL de la solicitud por la ruta del segundo argumento si contiene la expresión regular. Esto implicará que en casi todos los casos, vamos a hacer que la expresión regular coincida con toda la URL de la solicitud, de principio a fin, y el segundo argumento se construirá por sustitución de partes del primero.
Por ejemplo, las directivas:
Alias "/formularios/" "/home/secretario/documentos/"
AliasMatch "/formularios/" "/home/secretario/documentos/"
no son equivalentes, pues lo que hace AliasMatch es sustituir por /home/secretario/documentos/ toda URL solicitada que contenga en cualquier parte /formularios/.
Lo equivalente sería:
AliasMatch "^/formularios/(.*)$" "/home/secretario/documentos/$1"