ADC

Ejemplos de tutoriales de directivas avanzadas para reescritura

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 llevar a cabo varias tareas útiles, como eliminar encabezados HTTP innecesarios, enmascarar 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
  • Redirección de 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 en cadena codificada en URL y de la forma opuesta

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

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 redirige una URL externa a una 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 CLI

  • 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 NetScaler, 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 de forma global.

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, seleccione Reemplazar en el cuadro de lista Tipo.
  5. En el campo Nombre de encabezado, escriba Host.
  6. En la expresión de cadena de un campo de texto de reemplazo, escriba el nombre de host interno del servidor Web.
  7. Haga clic en Crear 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 detecta las conexiones al servidor web.
  11. En el menú desplegable Acción, elija la acción act_external_to_internal.
  12. En el editor de expresiones, construya la siguiente expresión:
HTTP.REQ.HOSTNAME.SERVER.EQ("www.example.com")
<!--NeedCopy-->
  1. Enlazar su nueva directiva globalmente.

Redirección de 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 URL adecuada. El ejemplo 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 del 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 introducirlos en una sola línea sin saltos de línea.

Para redirigir una consulta a la URL adecuada mediante la CLI

  • 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 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 NetScaler. 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 '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 de cualquier otra directiva de reescritura, es recomendable asignarle una prioridad alta. Si le asigna una prioridad de 1, se evalúa primero.

Reescribir HTTP a HTTPS

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

Para redirigir las URL HTTP a HTTPS mediante la CLI

  • Para crear una acción de reescritura llamada act_replace_http_with_https que reemplaza 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"' -search text("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 con esta operación de reescritura, consulte “Caso práctico: La directiva de reescritura para convertir enlaces HTTP a HTTPS 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. En concreto, en el ejemplo se muestra cómo quitar los siguientes encabezados:

  • Aceptar encabezado de codificación. La eliminación del encabezado Accept Encoding de las respuestas HTTP impide la compresión de la respuesta.
  • Encabezado Ubicación del contenido. Eliminar 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 infracció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 CLI

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 CLI

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 vincular la directiva globalmente mediante la CLI

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 a nivel de directorio para incluir la página de inicio predeterminada mediante la CLI

  • 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 http.req.url.path "\"/index.html\""

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

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 piratas informáticos pueden utilizar para poner en peligro su sitio web. Si bien enmascarar el encabezado no impedirá que un hacker experto encuentre información sobre su servidor, dificulta el hackeo de su servidor web y alienta a los hackers a elegir objetivos menos protegidos.

Para enmascarar el encabezado del servidor en las respuestas de la CLI

  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 en URL y de la manera opuesta

Las siguientes expresiones convierten texto sin formato en cadena codificada en URL y de la forma opuesta:

  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.
<!--NeedCopy-->
  1. SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE. (URL CODIFICADA a cadena)

Ejemplo:

("abc%20def%26123").SET_TEXT_MODE(URLENCODED).DECODE_USING_TEXT_MODE
Output will be
“abc def&123”
<!--NeedCopy-->
Ejemplos de tutoriales de directivas avanzadas para reescritura