Domanda

Ho sperimentato woopra.com Uno strumento di analisi web.Ciò richiede l'aggiunta di un pezzo di codice JavaScript a ciascuna pagina per funzionare.Questo è abbastanza facile con siti più dinamici con intestazioni o piè di pagina universali ma non con pagine HTML totalmente statiche.

Ho tentato di aggirare il problema utilizzando una combinazione di riscritture Apache e SSI per "avvolgere" l'HTML statico con il codice richiesto.Per esempio...

Ho apportato le seguenti modifiche alla mia configurazione di Apache

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

Il file 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 -->

L'idea era che arrivasse una richiesta

    /abc.html

verrebbe reindirizzato a

    /test.shtml?abc.html

l'shtml includerebbe quindi il file originale nella pagina di risposta.

Sfortunatamente non funziona come previsto :) qualcuno può vedere cosa sto facendo di sbagliato o magari suggerire un approccio alternativo.Esistono moduli Apache che potrebbero fare la stessa cosa.Preferibilmente può essere configurato in base al sito.

Grazie

Peter

È stato utile?

Soluzione

penso che mod_filter_ext è il modulo che stai cercando.Puoi scrivere un breve script Perl ad esempio per inserire il codice JS nelle pagine e registrarlo per elaborare le pagine HTML:

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

Potresti anche usare qualcosa del genere sed per eseguire la sostituzione.

Altri suggerimenti

Se le pagine sono statiche, perché dovresti modificarle al volo invece di preelaborare tutte le pagine di un sito, aggiungendo il pezzo di Javascript richiesto a ciascuna di esse?Questo è semplice e probabilmente più efficace (probabilmente hai più pagine visualizzate che pagine da modificare)

Questo potrebbe essere fatto in molti modi.Suggerirei un piccolo perl per la sostituzione in linea.

ok, il problema più grande del metodo sopra è che interromperebbe la validità del tuo HTML inserendo un tag script all'esterno del file <html> tag

Sarei d'accordo con gli altri su un pre-processo eseguito sui tuoi file html come uno script sed/awk

ecco un rapido esempio {assumendo che la parte dello script possa essere aggiunta prima del </head>e che il </head> è all'inizio di una nuova riga

#!/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

Potresti avere un errore di sintassi da allora $page non è incluso tra virgolette, tuttavia i due motivi principali per cui ciò non è incluso sono i seguenti:

  • includere virtual dovrebbe essere un percorso che inizia con /, nel tuo esempio la stringa di query dovrebbe essere /abc.html , non abc.html
  • anche la regola di riscrittura dovrebbe iniziare con il percorso, quindi deve esserlo

    RewriteRule ^(.*)\.html /test.shtml?$1.html
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top