Mod rewrite

De Astillas.net

Apuntes generales

  • Este módulo puede emplearse en los siguientes contextos:
    • Configuración de servidor general.
    • Host virtuales.
    • Directorios.
    • Archivos .htaccess, aunque en el caso de directorios debe estar permitido con la claúsula AllowOverride FileInfo.
  • Las alternativas más livianas son el módulo mod_alias y el mecanismo interno de coincidencia entre URL y recursos locales de la documentación oficial.
  • Las expresiones regulares que emplea el módulo son las compatibles con Perl.
  • Para depurar es muy aconsejable configurar y emplear rewritelog.
  • Los host virtuales no heredan expresamente las disposiciones de mod_rewrite por lo que es necesario volverlas a especificar o indicar que se hereden usando RewriteOptions Inherit.

La regla de uso es pues:

  • Activar el motor de reescritura.
  • Especificar reglas de reescritura de esta forma:
    • Fijar las condiciones en las que se aplica la reescritura (si es necesario).
    • Reescribir la dirección de acceso.
RewriteEngine on
RewriteCond ...
RewriteCond ...
...
RewriteRule ...

Conceptos

Condiciones de reescritura

  RewriteCond texto /expresión regular/ [parámetros]
  RewriteCond texto /expresión regular/ [parámetros]
  ...
  RewriteRule ...

Es posible definir una o más condiciones para restringir los tipos de peticiones que serán reescritos por la siguiente claúsula RewriteRule. Estas condiciones se encadenan entre sí en un AND lógico por lo que a menos que se emplee el parámetro OR se tendrán que cumplir todas.

Funcionan tomando el primer parámetro texto como una expresión cuyo valor debe expandirse, y que suele incluir referencias a variables especiales que guardan alguna característica de la petición.

  1. Expandir el primer parámetro (texto) para obtener un valor.
  2. Aplicar el segundo parámetro como una expresión regular sobre el primer valor.
    1. Si la expresión regular es verdadera y existen partes del patrón entre paréntesis rellenar las correspondientes variables %N.
    2. Si es falsa y en los parámetros finales no se incluye OR dar por no válida toda la condición.
  3. Repetir el primer paso hasta que se agoten las condiciones.

Variables de servidor

La tabla completa de variables de servidor se encuentra en la documentación oficial. Las descritas aquí son sólo algunas que me han sido útiles.

Variable Contenido
%{REMOTE_ADDR} dirección IP de la conexión remota

Regla de reescritura (RewriteRule)

Consiste en tres parámetros separados por espacios en blanco.

RewriteRule /patrón_de_coindidencia/ expresión_de_sustitución [parámetros]

Estos parámetros son:

  1. Patrón de coincidencia (pattern) sobre el URL entrante y que se verá afectado por la reescritura.
  2. Expresión de sustitución (substitution) en la que se verá convertido el URL entrante.
  3. Parámetros (flags) que afectan al proceso de reescritura.

El patrón es siempre una expresión regular que se aplica al URL entrante, siendo éste la parte entre el nombre de la máquina (hostname) y el carácter de cierre de interrogación (?) que marca el comienzo de los parámetros de consulta.

La expresión de sustitución puede ser una de estas tres cosas:

  • Una ruta de archivo a un recurso local
  • Una ruta web a un recurso
  • Un URL absoluto

y puede contener referencias a partes resultantes de aplicar el patrón de coincidencia al URL entrante en forma de variables numeradas ($1, $2, ...).