Pergunta

Eu tenho vindo a experimentar com woopra.com Uma ferramenta de análise da web.O que exige um pedaço de código javascript a ser adicionado a cada página para a função.Isso é muito fácil, com mais sites dinâmicos com a universal cabeçalhos ou rodapés, mas não para totalmente páginas html estáticas.

Tentei trabalhar redonda-lo usando uma combinação da Apache reescreve e SSI para "Quebrar" o estático html com o código necessário.Por exemplo...

Eu fiz as seguintes alterações na configuração do apache

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

O teste.shtml ficheiro contém...

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

A idéia era que um pedido vindo para

    /abc.html

seria redirecionado para

    /test.shtml?abc.html

o shtml seria, então, incluir o arquivo original para a página de resposta.

Infelizmente, ele não funciona muito bem como planejado :) alguém pode ver o que eu estou fazendo de errado, ou talvez sugerir uma abordagem alternativa.Existe alguma módulos do apache que poderia fazer a mesma coisa.De preferência, que pode ser configurado em uma base por site.

Obrigado

Pedro

Foi útil?

Solução

Eu acho que mod_filter_ext é o módulo que você está procurando.Você pode escrever um pequeno script Perl de exemplo, para inserir o código JS nas páginas e registrá-lo para o processo de páginas HTML:

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

Você pode até mesmo usar algo como sed para efectuar a substituição.

Outras dicas

Se as páginas são estáticas, por que você iria alterar-los em tempo real em vez de pré-processamento de todas as páginas em um site, adicionando o pedaço de necessários javascript para cada um deles?Isso é simples e, provavelmente, mais eficiente (você provavelmente terá mais visualizações de página de páginas para alterar)

Isso poderia ser feito um monte de caminho.Gostaria de sugerir uma pequena perl embutido substituição.

ok, o método acima, o maior problema é que ele iria quebrar a sua validade de html, colocando uma tag de script fora do <html> tags

eu gostaria de concordar com os outros em um pré-processo de execução através de seus arquivos de html, tais como sed/script awk

aqui está um exemplo rápido {supondo que o script parte pode ser adicionado antes do </head> e que o </head> é o início de uma nova linha

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

Você pode ter um erro de sintaxe, desde $page não está incluído entre aspas, no entanto, as duas principais razões para isso não são os seguintes:

  • incluem virtual deve um caminho que começa com /, no seu exemplo, a seqüência de caracteres de consulta deve ser o /abc.html , não abc.html
  • a regra de reescrita deve começar com o caminho do bem, de modo que a regra de reescrita tem de ser

    RewriteRule ^(.*)\.html /test.shtml?$1.html
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top