rewritecond mod_rewrite for apache mod-rewrite

mod_rewrite - rewrite mod apache



mod_rewrite para el problema de barra inclinada (4)

¡Fijo!

SOL6912: Configuración de un perfil HTTP para reescribir las URL para que las redirecciones de un servidor HTTP especifiquen el protocolo HTTPS

Actualizado: 8/7/07 12:00 a.m.

Un servidor virtual ClientSSL generalmente se configura para aceptar conexiones HTTPS desde un cliente, descifrar la sesión SSL y enviar la solicitud HTTP no encriptada al servidor web.

Cuando un URI solicitado no incluye una barra diagonal (una barra diagonal, como /, al final del URI), algunos servidores web generan una redirección de cortesía. Sin una barra inclinada, el servidor web tratará primero el recurso especificado en el URI como un archivo. Si no se puede encontrar el archivo, el servidor web puede buscar un directorio con el mismo nombre y, si lo encuentra, enviar una respuesta de redirección HTTP 302 al cliente con una barra diagonal. La redirección se devolverá al cliente en modo HTTP en lugar de HTTPS, lo que hará que la sesión SSL falle.

A continuación se muestra un ejemplo de cómo una respuesta de redirección HTTP 302 hace que la sesión SSL falle:

· Para solicitar una sesión SSL, un usuario escribe https://www.f5.com/stuff sin una barra inclinada.

· El navegador del cliente envía una solicitud SSL al servidor virtual ClientSSL, que reside en el sistema BIG-IP LTM.

· El sistema BIG-IP LTM luego descifra la solicitud y envía un comando GET / stuff al servidor web.

· Dado que el archivo / stuff no existe en el servidor web, pero existe un directorio / stuff / virtual, el servidor web envía una respuesta de redirección HTTP 302 para el directorio, pero agrega una barra al recurso. Cuando el servidor web envía la respuesta de redireccionamiento HTTP 302, especifica HTTP (no HTTPS).

· Cuando el cliente recibe la respuesta de redireccionamiento HTTP 302, envía una nueva solicitud al servidor virtual BIG-IP LTM que especifica HTTP (no HTTPS). Como resultado, la conexión SSL falla.

Configurar un perfil HTTP para reescribir las URL

En BIG-IP LTM versión 9.x, puede configurar un perfil HTTP para reescribir las URL de manera que los redireccionamientos desde un servidor HTTP especifiquen el protocolo HTTPS. Para hacerlo, realice el siguiente procedimiento:

  1. Inicie sesión en la utilidad de configuración.

  2. Haga clic en Tráfico local.

  3. Haz clic en Perfiles.

  4. Haga clic en el botón Crear.

  5. Escriba un nombre para el perfil.

  6. Elija http del menú desplegable del Perfil principal.

  7. En Configuración, configure Redirigir reescritura a Todo, Coincidencia o Nodos, según su configuración

Por ejemplo:

o Elija Todos para reescribir cualquier redireccionamiento HTTP 301, 302, 303, 305 o 307 a HTTPS

o Elija Coincidencia para volver a escribir los redireccionamientos cuando los componentes del URI de ruta y consulta de la solicitud y el redireccionamiento sean idénticos (a excepción de la barra inclinada final)

o Elija Nodo para reescribir redirecciones cuando el URI de redirección contiene una dirección IP de nodo en lugar de un nombre de host, y desea que el sistema lo cambie a la dirección del servidor virtual

  1. Haga clic en Finalizado.

Ahora debe asociar el nuevo perfil HTTP con el servidor virtual ClientSSL.

Me estoy jalando de lo que debería ser un problema increíblemente simple. Estamos ejecutando WebSphere IHS (Apache) a través de F5 BigIP. BigIP está haciendo la traducción https para nosotros. Nuestra url (modificada para web, no válida) es https://superniftyserver.com/lawson/portal .

Cuando alguien escribe solo eso sin la barra después del portal, Apache asume que "portal" es un archivo y no un directorio. Cuando Apache descubre qué es, envía la redirección permanente 301. Pero como Apache solo conoce http, envía la URL como http://superniftyserver.com/lawson/portal/, lo que genera problemas.

Así que probé un cambio de httpd.conf a nivel de servidor para mod_rewrite, esta es una de las docenas de combinaciones que he probado.

RewriteEngine en RewriteRule ^ / lawson / portal (. *) / Lawson / portal / $ 1

También probé RewriteRule ^ / lawson / portal $ / lawson / portal /

Entre muchas otras cosas ... ¿Qué me estoy perdiendo?


Si no puede obtener una respuesta sobre la sintaxis RewriteRule, aquí hay otras dos opciones para usted: Escribir un iRule personalizado en BigIp (ver F5 DevCentral ) que busca 301 respuestas y convertirlas a SSL; deje que la URL pase a su servidor WebSphere y realice una redirección programática que envíe HTTPS. Sin embargo, dado que F5 termina la conexión SSL, debe establecer un encabezado personalizado que configure (consulte PQ86347 ) para que el request.getScheme () de Java funcione como era de esperar.


LoadModule rewrite_module modules/mod_rewrite.so

asegúrese de que la línea esté en algún lugar de su archivo httpd.conf


Prueba esto:

# Trailing slash problem RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d RewriteRule ^(.+[^/])$ https://<t:sitename/>$1/ [redirect,last]