Citrix ADC

Ejemplos de tutoriales de directivas de sintaxis predeterminadas para reescribir

Con la función de reescritura, puede modificar cualquier parte de un encabezado HTTP y, para las respuestas, puede modificar el cuerpo HTTP. Puede utilizar esta función para realizar una serie de tareas útiles, como eliminar encabezados HTTP innecesarios, enmascarar direcciones URL internas, redirigir páginas web y redirigir consultas o palabras clave.

En los ejemplos siguientes, primero debe crear una acción de reescritura y una directiva de reescritura. A continuación, vincula la directiva globalmente.

Este documento incluye los siguientes detalles:

  • Redirigir una URL externa a una URL interna
  • Redirigir una consulta
  • Reescribir HTTP a HTTPS
  • Eliminación de encabezados no deseados
  • Reducción de redireccionamientos de servidores web
  • Enmascarar el encabezado del servidor
  • Conversión de texto sin formato a cadena codificada por URL y viceversa

Para obtener más información acerca de los comandos y las descripciones de sintaxis, consulte Referencia de comandos de reescritura la página.

Redirigir una URL externa a una URL interna

En este ejemplo se describe cómo crear una acción de reescritura y una directiva de reescritura que redirija una dirección URL externa a una dirección URL interna. Se crea una acción, denominada act_external_to_internal, que realiza la reescritura. A continuación, crea una directiva llamada pol_external_to_internal.

Para redirigir una URL externa a una URL interna mediante la interfaz de línea de comandos

  • Para crear la acción de reescritura, en el símbolo del sistema, escriba:

add rewrite action act_external_to_internal REPLACE "http.req.hostname.server" "host_name_of_internal_Web_server"

  • Para crear la directiva de reescritura, en el símbolo del sistema de Citrix ADC, escriba:

add rewrite policy pol_external_to_internal "http.req.hostname.server.eq("host_name_of_external_Web_server") act_external_to_internal"

  • Vincular la directiva globalmente.

Para redirigir una URL externa a una URL interna mediante la utilidad de configuración

  1. Vaya a AppExpert > Reescribir > Acciones.
  2. En el panel de detalles, haga clic en Agregar.
  3. En el cuadro de diálogo Crear acción de reescritura, escriba el nombre act_external_to_internal.
  4. Para reemplazar el nombre de host del servidor HTTP por el nombre del servidor interno, elija Reemplazar en el cuadro de lista Tipo.
  5. En el campo Nombre de encabezado, escriba Host.
  6. En el campo de expresión de cadena para texto de reemplazo, escriba el nombre de host interno del servidor web.
  7. Haga clic en Create y, luego, en Close.
  8. En el panel de navegación, haga clic en Directivas.
  9. En el panel de detalles, haga clic en Agregar.
  10. En el campo Nombre, escriba pol_external_to_internal. Esta directiva detectará conexiones con el servidor web.
  11. En el menú desplegable Acción, elija la acción act_external_to_internal.
  12. En el editor de expresiones, cree la siguiente expresión:
HTTP.REQ.HOSTNAME.SERVER.EQ("www.example.com")
  1. Enlazar su nueva directiva globalmente.

Redirigir una consulta

En este ejemplo se describe cómo crear una acción de reescritura y una directiva de reescritura que redirija una consulta a la dirección URL adecuada. En el ejemplo se supone que la solicitud contiene un encabezado Host establecido en www.example.com y un método GET con la cadena /query.cgi?server=5. La redirección extrae el nombre de dominio del encabezado de host y el número de la cadena de consulta, y redirige la consulta del usuario al servidor web5.example.com, donde se procesa el resto de la consulta del usuario.

Nota:

Aunque los siguientes comandos aparecen en varias líneas, debe escribirlos en una sola línea sin saltos de línea.

Para redirigir una consulta a la URL apropiada mediante la línea de comandos

  • Para crear una acción de reescritura denominada act_redirect_query que reemplace el nombre de host del servidor HTTP por el nombre del servidor interno, escriba:

add rewrite action act_redirect_query REPLACE q#http.req.header("Host").before_str(".example.com")' '"Web" + http.req.url.query.value("server")#

  • Para crear una directiva de reescritura denominada pol_redirect_query, escriba los siguientes comandos en el símbolo del sistema de Citrix ADC. Esta directiva detecta conexiones al servidor web que contienen una cadena de consulta. No aplique esta directiva a conexiones que no contengan una cadena de consulta:

add rewrite policy pol_redirect_query q#http.req.header("Host").eq("www.example.com") && http.req.url.contains("?")' act_redirect_query#

  • Enlazar su nueva directiva globalmente.

Dado que esta directiva de reescritura es muy específica y debe ejecutarse antes que cualquier otra directiva de reescritura, es aconsejable asignarle una prioridad alta. Si le asigna una prioridad de 1, se evaluará primero.

Reescribir HTTP a HTTPS

En este ejemplo se describe cómo reescribir las respuestas del servidor web para buscar todas las direcciones URL que comiencen con la cadena “http” y reemplazar esa cadena por “https”. Puede usar esto para evitar tener que actualizar páginas web después de mover un servidor de HTTP a HTTPS.

Para redirigir direcciones URL HTTP a HTTPS mediante la interfaz de línea de comandos

  • Para crear una acción de reescritura denominada act_replace_http_with_https que reemplace todas las instancias de la cadena “http” por la cadena “https”, introduzca el siguiente comando:

add rewrite action act_replace_http_with_https replace_all 'http.res.body(100)' '"https"' -pattern http

  • Para crear una directiva de reescritura denominada pol_replace_http_with_https que detecte conexiones con el servidor web, escriba el siguiente comando:

add rewrite policy pol_replace_http_with_https TRUE act_replace_http_with_https NOREWRITE

  • Enlazar su nueva directiva globalmente.

Para solucionar problemas de esta operación de reescritura, consulte “Caso práctico: Reescritura de directiva para convertir enlaces HTTP a HTTPS que no funciona.”

Eliminación de encabezados no deseados

En este ejemplo se explica cómo utilizar una directiva de reescritura para quitar encabezados no deseados. Específicamente, el ejemplo muestra cómo eliminar los encabezados siguientes:

  • Aceptar Encabezado de codificación. Al quitar el encabezado Accept Encoding de las respuestas HTTP, se evita la compresión de la respuesta.
  • Encabezado Ubicación de contenido. Quitar el encabezado Ubicación de contenido de las respuestas HTTP impide que el servidor proporcione a un hacker información que podría permitir una violación de seguridad.

Para eliminar encabezados de las respuestas HTTP, debe crear una acción de reescritura y una directiva de reescritura, y vincular la directiva globalmente.

Para crear la acción Reescritura adecuada mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba uno de los comandos siguientes para quitar el encabezado Aceptar codificación y evitar la compresión de la respuesta o quitar el encabezado Ubicación de contenido:

  • add rewrite action "act_remove-ae" delete_http_header "Accept-Encoding"
  • add rewrite action "act_remove-cl" delete_http_header "Content-Location"

Para crear la directiva de reescritura adecuada mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba uno de los comandos siguientes para quitar el encabezado Aceptar codificación o el encabezado Ubicación de contenido:

  • add rewrite policy "pol_remove-ae" true "act_remove-ae"
  • add rewrite policy "pol_remove-cl" true "act_remove-cl"

Para enlazar la directiva globalmente mediante la interfaz de línea de comandos

En el símbolo del sistema, escriba uno de los comandos siguientes, según corresponda, para vincular globalmente la directiva que ha creado:

  • bind rewrite global pol_remove_ae 100
  • bind rewrite global pol_remove_cl 200

Reducción de redireccionamientos de servidores web

En este ejemplo se explica cómo utilizar una directiva de reescritura para modificar las conexiones a la página principal y a otras direcciones URL que terminan con una barra diagonal (/) a la página de índice predeterminada del servidor, evitando redirecciones y reduciendo la carga en el servidor.

Para modificar las solicitudes HTTP de nivel de directorio para incluir la página principal predeterminada mediante la línea de comandos

  • Para crear una acción de reescritura denominada acción-default-homepage que modifique las direcciones URL que terminan en una barra diagonal para incluir la página principal predeterminada index.html, escriba:

add rewrite action "action-default-homepage" replace q\#http.req.url.path "/" "/index.html"\#

  • Para crear una directiva de reescritura denominada policy-default-homepage que detecte conexiones a la página principal y aplique la nueva acción, escriba:

add rewrite policy "policy-default-homepage" q\#http.req.url.path.EQ("/") "action-default-homepage"\#

  • Enlazar globalmente su nueva directiva para ponerla en vigor.

Enmascarar el encabezado del servidor

En este ejemplo se explica cómo utilizar una directiva Rewrite para enmascarar la información del encabezado Server en las respuestas HTTP del servidor web. Ese encabezado contiene información que los hackers pueden usar para poner en peligro su sitio web. Si bien enmascarar el encabezado no impedirá que un hacker experto descubra información sobre su servidor, hará que piratear su servidor web sea más difícil y animará a los hackers a elegir objetivos menos protegidos.

Para enmascarar el encabezado del servidor en las respuestas desde la línea de comandos

  1. Para crear una acción de reescritura denominada act_mask-server que reemplace el contenido del encabezado Servidor por una cadena no informativa, escriba:

add rewrite action "act_mask-server" replace "http.RES.HEADER(\\"Server\\")" "\\"Web Server 1.0\\""

  1. Para crear una directiva de reescritura denominada pol_mask-server que detecte todas las conexiones, escriba:

add rewrite policy "pol_mask-server" true "act_mask-server"

  1. Enlazar globalmente su nueva directiva para ponerla en vigor.

Cómo convertir texto sin formato a cadena codificada por URL y viceversa

Las siguientes expresiones convierten texto sin formato en cadena codificada por URL y viceversa:

  1. URL_RESERVED_CHARS_SAFE (cadena a URL ENCODED).

Ejemplo:

("abc def&123").URL_RESERVED_CHARS_SAFE
Output will be
“abc%20def%26123” which is url encoded.
  1. SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE. (URL ENCODED a cadena)

Ejemplo:

("abc%20def%26123").SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE
Output will be
“abc def&123”

Ejemplos de tutoriales de directivas de sintaxis predeterminadas para reescribir