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:
- 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>
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:
- Abra el Administrador de IIS.
- Seleccione "Sitio web predeterminado".
- En la vista de características, seleccione "Módulo URL Rewrite".
- 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.
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:
En la lista Condiciones previas, seleccione "<Crear nueva condición previa...>".
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"
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:
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="</body>" />
<action type="Rewrite" value="<script type='text/javascript'>//Your web analytics tracking code goes here...</script></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:
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.