<-
Apache > Servidor HTTP > Documentación > Versión 2.5 > Rewrite

Cuándo no usar mod_rewrite

Idiomas disponibles:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

Este documento complementa la mod_rewrite documentación de referencia. Describe quizás uno de los conceptos más importantes sobre mod_rewrite - concretamente, cuándo evitar usarlo.

mod_rewrite debería considerarse como último recurso, cuando otras alternativas resultan insuficientes. Usarlo cuando hay alternativas más simples lleva a configuraciones que son confusas, frágiles y difíciles de mantener. Entender qué otras alternativas están disponibles es un paso muy importante hacia el dominio de mod_rewrite.

Tenga en cuenta que muchos de estos ejemplos no funcionarán sin cambios en su configuración particular del servidor, por lo que es importante que los entienda, en lugar de simplemente copiar y pegar los ejemplos en su configuración.

La situación más común en la que mod_rewrite es la herramienta correcta es cuando la mejor solución requiere acceso a los archivos de configuración del servidor, y usted no tiene ese acceso. Algunas directivas de configuración solo están disponibles en el archivo de configuración del servidor. Así que si está en una situación de alojamiento donde solo tiene archivos .htaccess con los que trabajar, puede necesitar recurrir a mod_rewrite.

Consulte también

top

Redirección Simple

mod_alias proporciona las directivas Redirect y RedirectMatch, que proporcionan un medio para redirigir una URL a otra. Este tipo de redirección simple de una URL, o una clase de URLs, a otro lugar, debería realizarse usando estas directivas en lugar de RewriteRule. RedirectMatch le permite incluir una expresión regular en sus criterios de redirección, proporcionando muchos de los beneficios de usar RewriteRule.

Un uso común de RewriteRule es redirigir toda una clase de URLs. Por ejemplo, todas las URLs en el directorio /one deben ser redirigidas a http://one.example.com/, o quizás todas las solicitudes http deben ser redirigidas a https.

Estas situaciones se manejan mejor con la directiva Redirect. Recuerde que Redirect preserva la información de ruta. Es decir, una redirección para una URL /one también redirigirá todas las URLs bajo ella, como /one/two.html y /one/three/four.html.

Para redirigir URLs bajo /one a http://one.example.com, haga lo siguiente:

Redirect "/one/" "http://one.example.com/"

Para redirigir un nombre de host a otro, por ejemplo example.com a www.example.com, vea la receta de Nombres de Host Canónicos.

Para redirigir URLs http a https, haga lo siguiente:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect "/" "https://www.example.com/"
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... la configuración SSL va aquí
</VirtualHost>

El uso de RewriteRule para realizar esta tarea puede ser apropiado si hay otras directivas RewriteRule en el mismo ámbito. Esto se debe a que, cuando hay directivas Redirect y RewriteRule en el mismo ámbito, las directivas RewriteRule se ejecutarán primero, independientemente del orden de aparición en el archivo de configuración.

En el caso de la redirección de http-a-https, el uso de RewriteRule sería apropiado si no tiene acceso al archivo de configuración principal del servidor, y está obligado a realizar esta tarea en un archivo .htaccess en su lugar.

top

Alias de URL

La directiva Alias proporciona mapeo de un URI a un directorio - generalmente un directorio fuera de su DocumentRoot. Aunque es posible realizar este mapeo con mod_rewrite, Alias es el método preferido, por razones de simplicidad y rendimiento.

Usando Alias

Alias "/cats" "/var/www/virtualhosts/felines/htdocs"

El uso de mod_rewrite para realizar este mapeo puede ser apropiado cuando no tiene acceso a los archivos de configuración del servidor. Alias solo puede usarse en contexto de servidor o virtualhost, y no en un archivo .htaccess.

Los enlaces simbólicos serían otra forma de lograr lo mismo, si tiene Options FollowSymLinks habilitado en su servidor.

top

Alojamiento Virtual

Aunque es posible manejar hosts virtuales con mod_rewrite, rara vez es la forma correcta. Crear bloques <VirtualHost> individuales es casi siempre la forma correcta de proceder. En el caso de que tenga un número enorme de hosts virtuales, considere usar mod_vhost_alias para crear estos hosts automáticamente.

Módulos como mod_macro también son útiles para crear un gran número de hosts virtuales dinámicamente.

Usar mod_rewrite para la creación de hosts virtuales puede ser apropiado si está usando un servicio de alojamiento que no le proporciona acceso a los archivos de configuración del servidor, y por lo tanto está restringido a la configuración usando archivos .htaccess.

Vea el documento de hosts virtuales con mod_rewrite para más detalles sobre cómo podría lograr esto si aún parece ser el enfoque correcto.

top

Proxy Simple

RewriteRule proporciona la bandera [P] para pasar URIs reescritas a través de mod_proxy.

RewriteRule "^/?images(.*)" "http://imageserver.local/images$1" [P]

Sin embargo, en muchos casos, cuando no hay necesidad real de coincidencia de patrones, como en el ejemplo mostrado arriba, la directiva ProxyPass es una mejor opción. El ejemplo aquí podría expresarse como:

ProxyPass "/images/" "http://imageserver.local/images/"

Tenga en cuenta que ya sea que use RewriteRule o ProxyPass, todavía necesitará usar la directiva ProxyPassReverse para capturar redirecciones emitidas por el servidor backend:

ProxyPassReverse "/images/" "http://imageserver.local/images/"

Puede necesitar usar RewriteRule en su lugar cuando hay otras RewriteRules en efecto en el mismo ámbito, ya que una RewriteRule generalmente tendrá efecto antes que un ProxyPass, y por lo tanto puede anticiparse a lo que está intentando lograr.

top

Prueba de Variables de Entorno

mod_rewrite se usa frecuentemente para tomar una acción particular basada en la presencia o ausencia de una variable de entorno particular o cabecera de solicitud. Esto puede hacerse de manera más eficiente usando la directiva <If>.

Considere, por ejemplo, el escenario común donde RewriteRule se usa para imponer un nombre de host canónico, como www.example.com en lugar de example.com. Esto puede hacerse usando la directiva <If>, como se muestra aquí:

<If "req('Host') != 'www.example.com'">
    Redirect "/" "http://www.example.com/"
</If>

Esta técnica puede usarse para tomar acciones basadas en cualquier cabecera de solicitud, cabecera de respuesta o variable de entorno, reemplazando mod_rewrite en muchos escenarios comunes.

Vea especialmente la documentación de evaluación de expresiones para una visión general de qué tipos de expresiones puede usar en secciones <If>, y en ciertas otras directivas.

Idiomas disponibles:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn