Directorios y URLs en Apache

Resumen de una línea

Gestión de directorios y URLs: Options, Alias, Redirect, negociación contenido, índices, páginas error personalizadas.

Información

Opciones de Directorio (Repaso)

<Directory /var/www/>
    Options Indexes FollowSymLinks
</Directory>

Opciones disponibles:

  • Indexes — Listar directorio si no hay index
  • FollowSymLinks — Seguir enlaces simbólicos
  • MultiViews — Negociación contenido
  • ExecCGI — Ejecutar scripts CGI
  • Includes — Server-side includes (mod_include)
  • IncludesNOEXEC — Includes sin exec

Combinar con +/-:

<Directory /var/www/docs>
    Options -Indexes                    # No listar directorio
    Options +MultiViews                 # Activar negociación
</Directory>

Alias: Mapeo URL → Directorio

Alias mapea path URL a directorio diferente sin cambiar DocumentRoot:

# Mapeo simple
Alias /descargas /home/usuario/descargas
# URL: /descargas/archivo.zip
# Fichero: /home/usuario/descargas/archivo.zip
 
# Importante: Dar permisos en Directory también
<Directory /home/usuario/descargas>
    Options Indexes
    Require all granted
</Directory>
 
# Alias con final /
Alias /docs/ /usr/share/doc/
# URL: /docs/apache2/
# Fichero: /usr/share/doc/apache2/

Diferencia con DocumentRoot:

DocumentRoot:  / → /var/www/
Alias:         /descargas → /home/usuario/descargas
               /static → /opt/assets/

Redirect: Redirecciones

Redirigir URLs (cliente sigue redirect, ve nueva URL):

# Redirigir temporal (302)
Redirect /vieja.html http://www.ejemplo.com/nueva.html
 
# Redirigir permanente (301)
Redirect permanent /vieja.html http://www.ejemplo.com/nueva.html
 
# Redirigir temporalmente (307 preserva método)
Redirect temporary /vieja.html http://www.ejemplo.com/nueva.html
 
# Redirigir directorio
Redirect /viejo/ http://www.nuevo.com/
 
# Con patrón regex (usa RedirectMatch)
RedirectMatch permanent ^/articulos/(.*)\.html$ /blog/$1/
# /articulos/post1.html → /blog/post1/

Códigos HTTP:

  • 301 (Moved Permanently) — Permanente, actualiza bookmarks
  • 302 (Found) — Temporal, no cambiar bookmarks
  • 307 (Temporary Redirect) — Temporal, preserva método HTTP

DirectoryIndex: Fichero Índice Default

# Apache busca en orden estos ficheros si accede directorio
DirectoryIndex index.html index.htm index.php
 
# URL: /blog/
# Busca: /var/www/blog/index.html (si existe)
#        /var/www/blog/index.htm
#        /var/www/blog/index.php
# Si ninguno, lista directorio (si Options Indexes)

Negociación de Contenido

Apache elige formato según preferencias cliente (Accept headers):

# Activar negociación
<Directory /var/www/docs>
    Options MultiViews
</Directory>
 
# Ficheros disponibles:
# documento.html
# documento.pdf
# documento.txt
 
# Cliente solicita:
# GET /documento HTTP/1.1
# Accept: application/pdf, text/html;q=0.9
 
# Apache responde: documento.pdf (preferencia cliente)
 
# Con type map (configuración explícita):
# documento.var (fichero especial que lista variantes)

Páginas de Error Personalizadas

Mostrar página custom en lugar de error genérico:

# Errores globales
ErrorDocument 404 /pagina-no-encontrada.html
ErrorDocument 500 "Error interno del servidor"
ErrorDocument 403 /acceso-denegado.html
 
# En VirtualHost:
<VirtualHost *:80>
    ServerName ejemplo.com
    ErrorDocument 404 /404.html
    ErrorDocument 500 /500.html
</VirtualHost>
 
# Mostrar fichero: ErrorDocument 404 /404.html
# Mostrar texto: ErrorDocument 404 "Página no encontrada"
# Ejecutar CGI: ErrorDocument 404 /cgi-bin/error.pl
 
# Fichero /404.html:
<html>
    <h1>404 - Página no encontrada</h1>
    <p>Lo sentimos, la página solicitada no existe.</p>
</html>

Orden Búsqueda Ficheros

Cuando cliente solicita URL, Apache busca:

1. DocumentRoot (o Alias si aplica)
2. FollowSymLinks (si activado, sigue enlaces)
3. MultiViews (si activado, negocia contenido)
4. DirectoryIndex (si directorio, busca index)
5. Indexes (si Options Indexes, lista directorio)
6. ErrorDocument (si error, muestra página error)

Casos de Uso

Servir archivos estáticos desde ubicación alternativa

Alias /assets /opt/web/assets
<Directory /opt/web/assets>
    Options -Indexes
    Require all granted
</Directory>

Redirigir dominio antiguo

<VirtualHost *:80>
    ServerName viejo.com
    Redirect permanent / http://nuevo.com/
</VirtualHost>

Página error 404 con información útil

ErrorDocument 404 /404.html
 
# /404.html contiene:
# - Sugerencias de búsqueda
# - Enlaces a secciones principales
# - Contacto support

Relaciones

Conecta con

Fuentes