Hi Dana,
we are using the iRule below to inject Google-Analytic code into HTML content. It shouldn't be that difficult to adopt our rather simple iRule for your own solution...
when HTTP_RESPONSE {
STREAM::disable
if { [string tolower [HTTP::path]] ends_with ".aspx" } then {
set Insert_GA_Code "XYZ-YOUR_GA_ID-XYZ"
Note: Instead of removing the "Accept-Encoding" header, you could also use a compression profile on your virtual server
and make sure the "Keep Accept Encoding" is disabled. This would allow you to still compress the content before
sending it to the client.
HTTP::header remove "Accept-Encoding"
}
}
when HTTP_RESPONSE {
if { [info exists Insert_GA_Code] } then {
if { $debug } { log -noname local0. "$log_prefix Need to inject GA Tracking Code for the requested ressource." }
if { [HTTP::header value Content-Type] eq "text/html" {
if { $debug } { log -noname local0. "$log_prefix The \"Content-Type\" Headers containing \"text/html\". Preparing the XYZ specific GA Tracking Code for HTTP Response Injection." }
if { $debug } { log -noname local0. "$log_prefix Generating the XYZ specific GA Tracking Code." }
set ga_code_snipped "
"
if { $debug } { log -noname local0. "$log_prefix Setting up the SEARCH/REPLACE expression for GA-Code injection." }
STREAM::expression "@@$ga_code_snipped@"
if { $debug } { log -noname local0. "$log_prefix Reenabling Content Streaming Profile." }
STREAM::enable
unset -nocomplain Insert_GA_Code
unset -nocomplain ga_code_snipped
}
}
}
Note: We inject the code Google code right before , depending on your requirement right after or even other locations could also be used.
Note: Our JScript code is escaped to make it TCL friedly while allowing the $Insert_GA_Code variable substitution. If you need dynamic content within your injected code, then you have replace every instance of \=\\ (your first escape!), " = \" , [ = \[ , ] = \] , { = \{ , } = \} using a text editor of your choice. If you don't need any kind of $variable substitution within the code, then just wrap the code into base64 and use set ga_code_snipped [b64decode YOUR/BASE64/DATA==] to fetch the code or even use a $static::variable to store and load the [b64decode YOUR/BASE64/DATA==] data.
Cheers, Kai