Bekommen Apache zu ändern, statische Webseiten on the fly
Frage
Ich habe experimentiert mit woopra.com Ein web-Analyse-tool.Das erfordert ein Stück javascript-code, der auf jeder Seite-Funktion.Dies ist einfach genug mit dynamischer Websites mit universal-Kopfzeilen oder Fußzeilen aber nicht für völlig statischen html-Seiten.
Ich versuchte zu arbeiten, um Sie durch die Verwendung einer Kombination von Apache schreibt und SSI zu "Verpacken", die statische html-Seiten mit dem erforderlichen code.Zum Beispiel...
Ich habe die folgenden änderungen an meiner apache config
RewriteEngine On
RewriteCond %{REQUEST_URI} !=test.shtml
RewriteCond %{IS_SUBREQ} false
RewriteRule (.*)\.html test.shtml?$1.html
Der 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 eine Anforderung kommen in für
/abc.html
würde umgeleitet werden
/test.shtml?abc.html
die shtml würde dann die ursprüngliche Datei in der Antwort-Seite.
Leider ist es nicht ganz so funktioniert wie geplant :) kann jemand sehen, was ich falsch mache oder vielleicht eine alternative vorschlagen Ansatz.Gibt es eine apache-Modulen, die das gleiche tun könnte.Vorzugsweise, das konfiguriert werden kann auf einer pro-Seite-basis.
Vielen Dank
Peter
Lösung
Ich denke, dass mod_filter_ext ist das Modul, das Sie suchen.Sie können schreiben, ein kurzes Perl-Skript zum Beispiel zum einfügen der JS-code in die Seiten und register zum verarbeiten von HTML-Seiten:
while (<>) {
s/<html>/\Q<script>....\E/;
print $_;
}
Man könnte sogar so etwas wie sed
zur Durchführung der substitution.
Andere Tipps
Wenn die Seiten statisch sind, warum würden Sie ändern on the fly " statt Vorverarbeitung alle Seiten auf einer Website, ist das hinzufügen von Stück gekennzeichneten javascript, um jeden von Ihnen?Das ist einfacher und wohl auch effektiver (Sie haben wahrscheinlich mehr Seitenaufrufe als die Seiten zu wechseln)
Dies könnte getan werden, eine Menge Weg.Ich würde vorschlagen, ein kleines perl inline-Ersatz.
ok, die obige Methode das größte problem ist es, brechen Sie Ihre html-Wirksamkeit, indem ein script-tag außerhalb des <html>
tags
ich würde Zustimmen, mit der anderen auf eine pre-Prozess über Ihre html-Dateien wie ein sed/awk-Skript
heres ein kurzes Beispiel: {vorausgesetzt, das Skript gehört, können Hinzugefügt werden, bevor die </head>
und, dass die </head>
ist am Anfang ein 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
Möglicherweise haben Sie einen Syntaxfehler, da $page
ist nicht im Lieferumfang enthalten, in Anführungszeichen gesetzt, jedoch sind die zwei wichtigsten Gründe, die dies nicht sind die folgenden:
- auch die virtuellen sollte ein Pfad beginnend mit / in deinem Beispiel die query-string-sollte /abc.html nicht abc.html
die rewrite-Regel sollte starten mit dem Weg als gut, so dass die rewrite-Regel
RewriteRule ^(.*)\.html /test.shtml?$1.html