Compartir a través de


Uso de reglas de salida para agregar código de seguimiento de análisis web

por Ruslan Yakushev

Esta sección de la documentación se aplica a la versión 2.0 del Módulo URL Rewrite para IIS 7.

Este tutorial le guiará a través de la creación de una regla de reescritura de salida de IIS que inserte un script de seguimiento de análisis web en páginas web.

Requisitos previos

Para ejecutar este tutorial, debe disponer de lo siguiente:

  1. Módulo URL Rewrite 2.0 RCrelease instalado.

Introducción

El propósito de un servicio de análisis web es proporcionar a los editores de sitios web información estadística sobre los visitantes a sus sitios. Esta información ayuda a los editores del sitio a optimizar el contenido, los anuncios y las ofertas de servicio con el fin de aumentar la satisfacción del cliente y la ROI. Normalmente, los servicios de análisis web en línea, como Google Analytics o Omniture, trabajan recopilando datos sobre los visitantes del sitio web. Cuando los propietarios del sitio solicitan informes, el proveedor de análisis web procesa estos datos y los presenta a los propietarios del sitio en un formato cómodo y fácil de entender. Para habilitar la recopilación de datos necesaria para el análisis, los propietarios del sitio web deben instrumentar todas las páginas de un sitio web con un script de seguimiento emitido por el proveedor de servicios de análisis web.

En algunos casos, la adición de código de seguimiento a las páginas web es una tarea sencilla. Sin embargo, en muchos casos podría ser necesario agregar manualmente el script a numerosas páginas web. En esos casos, la instrumentación de análisis web se convierte en una tarea costosa y lenta. La funcionalidad de reescritura de respuesta en la versión 2 del Módulo URL Rewrite puede ayudar en esas situaciones mediante la ejecución de las reglas de salida que cambian el contenido de la respuesta sobre la marcha.

Crear una regla de reescritura de salida

Para empezar, creará una regla de reescritura de salida que agrega un fragmento de código de JavaScript a la respuesta HTML. El fragmento de código se inserta inmediatamente antes de la etiqueta </body> de cierre, como en la ilustración siguiente.

... 
    <script type='text/javascript'>
        //Your web analytics tracking code goes here...
    </script>
</body>

Ejemplo de código de seguimiento de análisis web de H T M L y código X M L que muestra la función HtmlEncode.ADVERTENCIA: En este ejemplo concreto, se supone que el código JavaScript procede de un origen de confianza y se debe insertar en la página HTML tal como está. En muchos otros casos, cuando se modifican los encabezados de respuesta o el contenido de la respuesta mediante una regla de reescritura de salida, se debe tener precaución adicional para asegurarse de que el texto que se inserta en la respuesta no contiene ningún código ejecutable del lado cliente, lo que puede dar lugar a vulnerabilidades de scripting entre sitios. Esto es especialmente importante cuando la regla de reescritura usa datos que no son de confianza, como encabezados HTTP o la cadena de consulta, para compilar la cadena que se insertará en la respuesta HTTP. En tales casos, la cadena de reemplazo debe codificarse en HTML mediante la función HtmlEncode, por ejemplo:

<action type="Rewrite" value="{HtmlEncode:{HTTP_REFERER}}" />

Para crear la regla de salida:

  1. Abra el Administrador de IIS.
  2. Seleccione "Sitio web predeterminado".
  3. En la vista de características, seleccione "Módulo URL Rewrite".
    Captura de pantalla de la vista de características de ventana I I S Manager con la opción U R L Rewrite seleccionada.
  4. En el panel Acciones del lado derecho, haga clic en "Agregar reglas...". En el cuadro de diálogo "Agregar reglas", seleccione la "Regla en blanco" en la categoría "Reglas de salida" y haga clic en Aceptar.
    Captura de pantalla del cuadro de diálogo Agregar reglas con la regla en blanco seleccionada en Reglas de salida.

Ahora debe definir la regla de salida real. En el Módulo URL Rewrite 2.0, se define una regla de reescritura de salida especificando la siguiente información:

  • Nombre de la regla.
  • Condición previa opcional que controla si esta regla se debe aplicar a una respuesta.
  • Patrón que se va a usar para hacer coincidir la cadena en la respuesta.
  • Un conjunto opcional de condiciones.
  • Acción que se va a realizar si un patrón coincide y todas las comprobaciones de condición se han realizado correctamente.

Asignar un nombre a la regla

En el cuadro de texto "Nombre", escriba un nombre que identifique de forma única la regla, por ejemplo: "Agregar script de seguimiento".

Definir una condición previa

Se usa una condición previa para evaluar si la evaluación de las reglas de salida debe realizarse en una respuesta. Por ejemplo, si es una regla que modifica el contenido HTML, solo se deben evaluar en esta regla las respuestas HTTP con el encabezado content-type establecido en "text/html". La evaluación de reglas de salida y la reescritura de contenido es una operación intensiva de CPU que puede afectar negativamente al rendimiento de una aplicación web. Por lo tanto, use condiciones previas para restringir los casos en los que se aplican las reglas de salida.

Dado que la regla que está creando solo debe aplicarse en las respuestas HTML, definirá una condición previa que compruebe si el content-type del encabezado de respuesta HTTP es igual a "text/html".

Para definir una condición previa:

  1. En la lista Condiciones previas, seleccione "<Crear nueva condición previa...>".

  2. Esto le llevará al cuadro de diálogo Editor de condición previa, donde deberá definir la condición previa. Especifique la configuración de la condición previa como se indica a continuación:

    • Nombre: "IsHTML"

    • Uso de: "Expresiones regulares"

    • Haga clic en "Agregar" para abrir el cuadro de diálogo "Agregar condición". En este cuadro de diálogo, especifique:

      • Entrada de condición: "{RESPONSE_CONTENT_TYPE}"

      • Comprobar si la cadena de entrada: "Coincide con el patrón"

      • Patrón: "^text/html"

        Captura de pantalla del cuadro de diálogo Agregar editor de condición previa con la configuración.

  3. Haga clic en Aceptar para guardar la condición previa y volver a la página "Editar regla".

Definir un ámbito coincidente

La regla de reescritura de salida puede funcionar en el contenido de un encabezado HTTP o en el contenido del cuerpo de la respuesta. Esta regla debe modificar el contenido de la respuesta; por lo tanto, en la lista desplegable "Ámbito de coincidencia" elija "Respuesta".

Definir un patrón

En la lista desplegable "Uso de:", elija la opción "Coincidencia exacta".

En el cuadro de texto "Patrón", escriba la cadena siguiente:

</body>

Definir una acción

Elija el tipo de acción "Reescribir" que aparece en el cuadro de grupo "Acción". En el cuadro de texto "Valor", escriba la cadena siguiente:

<script type='text/javascript'>//Your web analytics tracking code goes here...</script></body>

Esta cadena especifica el nuevo valor que se usará como reemplazo de la cadena coincidente dentro de una respuesta. En este caso concreto, la cadena "</body>" se reemplazará por el fragmento de código de JavaScript seguido de la etiqueta de cuerpo HTML de cierre.

Deje los valores predeterminados restantes. La página de propiedades "Editar regla" debe ser similar a la página siguiente:

Captura de pantalla de la página de propiedades Editar regla de salida con la configuración seleccionada.

Guarde la regla haciendo clic en la acción "Aplicar" en el lado derecho.

Visualización de la regla de reescritura en el archivo de configuración

Las reglas de reescritura se almacenan en el archivo aplicationHost.config o en los archivos web.config. Para comprobar la configuración de la regla que acabamos de crear, abra un archivo web.config ubicado en %SystemDrive%\inetput\wwwroot\. En este archivo debería ver la sección <rewrite> que contiene todas las definiciones de reglas:

<rewrite>
 <outboundRules>
  <rule name="Add tracking script" patternSyntax="ExactMatch" preCondition="">
   <match filterByTags="None" pattern="&lt;/body>" />
   <action type="Rewrite" value="&lt;script type='text/javascript'>//Your web analytics tracking code goes here...&lt;/script>&lt;/body>" />
  </rule>
 <preConditions>
  <preCondition name="IsHTML">
    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
  </preCondition>
 </preConditions>
</outboundRules>
</rewrite>

Probar la regla

Para probar que la regla agrega correctamente un código JavaScript a la página web, solicite esta dirección URL http://localhost/iisstart.htm.

Una vez que obtenga una respuesta del servidor, abra el código fuente HTML real (si usa Internet Explorer 8, vaya a Página --> Ver origen). El código HTML de respuesta contendrá el código JavaScript antes de la etiqueta de cuerpo HTML de cierre:

Captura de pantalla de la ventana I I S 7 con el Bloc de notas que muestra el código JavaScript.

Resumen

En este tutorial ha obtenido información sobre cómo usar reglas de salida en la versión 2 del Módulo URL Rewrite para modificar el contenido de la respuesta HTTP sobre la marcha. Esta funcionalidad es muy útil cuando necesita realizar modificaciones menores en las respuestas HTTP generadas por las aplicaciones web, pero no tiene control de la aplicación o no es práctico realizar cambios a gran escala en la aplicación.