3

私はwoopra.comWeb分析ツールを試してきました。これを機能させるには、各ページにJavaScriptコードを追加する必要があります。これは、ユニバーサルヘッダーまたはフッターを備えたより動的なサイトでは十分に簡単ですが、完全に静的なhtmlページではそうではありません。

Apacheの書き換えとSSIの組み合わせを使用して、静的htmlを必要なコードで「ラップ」することで回避しようとしました。例えば...

apacheの設定に次の変更を加えました

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

test.shtmlファイルには...が含まれています

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

アイデアは、

    /abc.html

にリダイレクトされます

    /test.shtml?abc.html

shtmlは、元のファイルを応答ページに含めます。

残念ながら、それは計画どおりには機能しません:)誰かが私が間違っていることを確認したり、おそらく別のアプローチを提案したりできます。同じことを行うことができるapacheモジュールはありますか?好ましくは、それはサイトごとに構成することができる。

ありがとう

ピーター

4

4 に答える 4

2

mod_filter_extはあなたが探しているモジュールだと思います。たとえば、短いPerlスクリプトを記述して、ページにJSコードを挿入し、それを登録してHTMLページを処理することができます。

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

のようなものを使用sedして置換を実行することもできます。

于 2008-09-02T17:53:01.620 に答える
1

ページが静的である場合、サイト上のすべてのページを前処理して、必要なJavaScriptを各ページに追加するのではなく、その場でページを変更するのはなぜですか?これは単純で、おそらくより効率的です(変更するページよりもページビューが多い可能性があります)

これは多くの方法で行うことができます。インライン交換には小さなperlをお勧めします。

于 2008-09-02T18:43:02.703 に答える
0

上記の方法の最大の問題は、タグの外側にスクリプトタグを配置することでHTMLの有効性が損なわれることです<html>

sed/awkスクリプトなどのhtmlファイルに対する前処理の実行について他の人に同意します

ここに簡単な例があります{スクリプト部分をの前に追加でき、改行の先頭にある</head> と仮定します</head>

#!/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
于 2009-01-29T01:05:18.270 に答える
0

は引用符で囲まれていないため、構文エラーが発生する可能性がありますが$page、引用符で囲まれていない主な理由は次の 2 つです。

  • / で始まるパスに virtual を含める必要があります。例では、クエリ文字列は abc.html ではなく /abc.html にする必要があります。
  • 書き換えルールもパスで開始する必要があるため、書き換えルールは

    RewriteRule ^(.*)\.html /test.shtml?$1.html
    
于 2009-07-28T21:25:24.623 に答える