2008-09-02 19 views
2

Ich experimentiere mit woopra.com Ein Webanalyse-Tool. Was erfordert ein Stück JavaScript-Code, um jede Seite hinzugefügt werden, um zu funktionieren. Dies ist bei dynamischen Seiten mit universellen Kopf- oder Fußzeilen ganz einfach, nicht jedoch bei vollständig statischen HTML-Seiten.Apache zum statischen Ändern von Webseiten erhalten

Ich versuchte, um es zu umgehen, indem Sie eine Kombination von Apache Rewrites und SSI's "Wrap" die statische HTML mit dem erforderlichen Code. Zum Beispiel ...

Ich habe die folgenden Änderungen an meine Apache-Konfiguration

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

Die test.shtml Datei enthält ...

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

Die Idee war, dass ein Antrag kommt in für

/abc.html 

würde

umgeleitet werden
/test.shtml?abc.html 

die Shtml würde dann die ursprüngliche Datei in die Antwort-Seite enthalten.

Leider funktioniert es nicht so wie geplant :) kann jemand sehen, was ich falsch mache oder vielleicht einen alternativen Ansatz vorschlagen. Gibt es Apache-Module, die das gleiche tun könnten? Vorzugsweise kann das pro Site konfiguriert werden.

Dank

Peter

Antwort

2

Ich denke, dass mod_filter_ext ist das Modul die Sie suchen. Sie können einen kurzen Perl-Skript schreiben, zum Beispiel des JS-Code in den Seiten einfügen und registrieren Sie HTML-Seiten zu verarbeiten:

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

Sie sogar so etwas wie sed auszuführen, um die Substitution verwenden könnten.

0

Wenn die Seiten statisch sind, warum sollten Sie sie im laufenden Betrieb ändern, anstatt alle Seiten einer Website vorzufunktionieren, und jedem von ihnen das erforderliche JavaScript hinzufügen? Dies ist einfach und wahrscheinlich effizienter (Sie haben wahrscheinlich mehr Seitenaufrufe als Seiten zu ändern)

Dies könnte viel getan werden. Ich würde vorschlagen, ein kleines Perl zu Inline-Ersatz.

0

ok das Verfahren über das größte Problem ist es Ihre HTML-Gültigkeit, indem ein Skript-Tag außerhalb der <html> Tags

ich würde zustimmen mit den anderen auf einem Vorprozess Lauf über Ihre HTML-Dateien wie ein Bruch würde sed/awk Skript

here ein kurzes Beispiel {das Skript Teil unter der Annahme, kann vor den </head> hinzugefügt wird und dass die </head> ist zu Beginn eines newline

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

Sie können einen Syntaxfehler haben seit $page nicht in Anführungszeichen eingeschlossen ist, aber die beiden Hauptgründe dafür, dass dies tut nicht die folgenden:

  • umfassen die Abfrage-String einen Pfad mit/beginnen, in Ihrem Beispiel virtuelle sollten sollte /abc.html, nicht abc.html
  • die Rewrite-Regel auch mit dem Pfad beginnen soll, so dass die Rewrite-Regel

    RewriteRule ^(.*)\.html /test.shtml?$1.html 
    
sein muss