Question

J'ai expérimenté woopra.com Un outil d'analyse Web.Ce qui nécessite d'ajouter un morceau de code javascript à chaque page pour fonctionner.C'est assez simple avec des sites plus dynamiques avec des en-têtes ou des pieds de page universels, mais pas pour des pages HTML totalement statiques.

J'ai essayé de contourner ce problème en utilisant une combinaison de réécritures Apache et de SSI pour « envelopper » le code HTML statique avec le code requis.Par exemple...

J'ai apporté les modifications suivantes à ma configuration Apache

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

Le fichier test.shtml contient...

    <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'idée était qu'une demande arrivant pour

    /abc.html

serait redirigé vers

    /test.shtml?abc.html

le shtml inclurait alors le fichier original dans la page de réponse.

Malheureusement, cela ne fonctionne pas comme prévu :) quelqu'un peut-il voir ce que je fais de mal ou peut-être suggérer une approche alternative.Existe-t-il des modules Apache qui pourraient faire la même chose.De préférence, cela peut être configuré par site.

Merci

Pierre

Était-ce utile?

La solution

je pense que mod_filter_ext est le module que vous recherchez.Vous pouvez par exemple écrire un court script Perl pour insérer le code JS dans les pages et l'enregistrer pour traiter les pages HTML :

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

Vous pourriez même utiliser quelque chose comme sed pour effectuer la substitution.

Autres conseils

Si les pages sont statiques, pourquoi les modifieriez-vous à la volée au lieu de prétraiter toutes les pages d'un site, en ajoutant le morceau de javascript requis à chacune d'elles ?C'est simple et probablement plus efficace (vous avez probablement plus de pages vues que de pages à modifier)

Cela pourrait être fait de plusieurs manières.Je suggérerais un petit Perl pour le remplacement en ligne.

ok, le plus gros problème de la méthode ci-dessus est qu'elle briserait votre validité HTML en plaçant une balise de script en dehors du <html> Mots clés

je serais d'accord avec les autres sur un pré-processus exécuté sur vos fichiers HTML tel qu'un script sed/awk

voici un exemple rapide {en supposant que la partie script puisse être ajoutée avant le </head>et que le </head> est au début d'une nouvelle ligne

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

Il se peut que vous ayez une erreur de syntaxe puisque $page n'est pas inclus dans les guillemets, mais les deux principales raisons pour lesquelles ce n'est pas le cas sont les suivantes :

  • inclure virtual doit être un chemin commençant par /, dans votre exemple, la chaîne de requête doit être /abc.html , pas abc.html
  • la règle de réécriture doit également commencer par le chemin, donc la règle de réécriture doit être

    RewriteRule ^(.*)\.html /test.shtml?$1.html
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top