Pregunta

he estado experimentando con woopra.com Una herramienta de análisis web.Lo que requiere que se agregue un fragmento de código javascript a cada página para funcionar.Esto es bastante fácil con sitios más dinámicos con encabezados o pies de página universales, pero no con páginas HTML totalmente estáticas.

Intenté solucionarlo utilizando una combinación de reescrituras de Apache y SSI para "envolver" el html estático con el código requerido.Por ejemplo...

Hice los siguientes cambios en mi configuración de Apache

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !=test.shtml
    RewriteCond %{IS_SUBREQ}  false 
    RewriteRule (.*)\.html test.shtml?$1.html

El archivo test.shtml contiene...

    <script type="text/javascript">
       var XXXXid = 'xxxxxxx';
    </script>
    <script src="http://xxxx.woopra.com/xx/xxx.js"></script>

    <!--#set var="page" value="$QUERY_STRING" -->
    <!--#include virtual= $page -->

La idea era que una solicitud que llegara para

    /abc.html

sería redirigido a

    /test.shtml?abc.html

Luego, el shtml incluiría el archivo original en la página de respuesta.

Desafortunadamente, no funciona según lo planeado :) ¿Alguien puede ver lo que estoy haciendo mal o quizás sugerir un enfoque alternativo?¿Existe algún módulo de Apache que pueda hacer lo mismo?Preferiblemente, eso se puede configurar por sitio.

Gracias

Pedro

¿Fue útil?

Solución

Creo que mod_filtro_ext es el módulo que estás buscando.Puede escribir un script Perl corto, por ejemplo, para insertar el código JS en las páginas y registrarlo para procesar páginas HTML:

while (<>) {
    s/<html>/\Q<script>....\E/;
    print $_;
}

Incluso podrías usar algo como sed para realizar la sustitución.

Otros consejos

Si las páginas son estáticas, ¿por qué cambiarlas sobre la marcha en lugar de preprocesar todas las páginas de un sitio, agregando la parte de JavaScript requerida a cada una de ellas?Esto es simple y probablemente más eficiente (probablemente tenga más páginas vistas que páginas para cambiar)

Esto se podría hacer de muchas maneras.Yo sugeriría un pequeño Perl para el reemplazo en línea.

ok, el mayor problema del método anterior es que rompería la validez de tu html al colocar una etiqueta de script fuera del <html> etiquetas

Estoy de acuerdo con los demás en ejecutar un preproceso sobre sus archivos html, como un script sed/awk.

Aquí hay un ejemplo rápido {asumiendo que la parte del script se puede agregar antes del </head>y que el </head> está al comienzo de una nueva línea

#!/bin/bash

cd /var/webserver/whatever/

grep -r '<\/head>' */*|grep "^.*\.html*:" >/var/tmp/tempfile.txt
((lines = $(wc -l /var/tmp/dom-tempfile.txt | awk '{print $1}')))
if [ $lines -gt 0 ]
then
 while read line; do
 sed 's/<script type="text\/javascript"> var XXXXid = "xxxxxxx"; <\/script><script src="http:\/\/xxxx\.woopra\.com\/xx\/xxx\.js"><\/script><\/head>/^<\/head>/g' $line>/var/tmp/tempfile.htm
 mv /var/tmp/tempfile.htm $line
 done < <(sed 's/\(^.*\.html*\):.*$/\1/' /var/tmp/tempfile.txt)
fi
exit 0

Es posible que tenga un error de sintaxis ya que $page no está incluido entre comillas, sin embargo, las dos razones principales por las que esto no es así son las siguientes:

  • incluya virtual si una ruta comienza con /, en su ejemplo la cadena de consulta debe ser /abc.html, no abc.html
  • la regla de reescritura también debe comenzar con la ruta, por lo que la regla de reescritura debe ser

    RewriteRule ^(.*)\.html /test.shtml?$1.html
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top