我一直在试验woopra.com网络分析工具。这需要将一段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模块可以做同样的事情。最好是可以按站点配置。
由于
彼得
答案 0 :(得分:2)
我认为mod_filter_ext是您正在寻找的模块。您可以编写一个简短的Perl脚本,例如在页面中插入JS代码并注册它以处理HTML页面:
while (<>) {
s/<html>/\Q<script>....\E/;
print $_;
}
您甚至可以使用sed
之类的内容来执行替换。
答案 1 :(得分:1)
如果页面是静态的,为什么你会动态更改它们而不是预处理网站上的所有页面,为每一个页面添加一条必需的javascript?这很简单,可能更有效(您的页面浏览量可能比要更改的页面更多)
这可以通过很多方式完成。我建议用一个小的perl来进行内联替换。
答案 2 :(得分:0)
好的上述方法最大的问题是它会在<html>
标记之外放置一个脚本标记来破坏你的HTML有效性
我同意其他人对你的html文件(如sed / awk脚本)的预处理运行
下面是一个快速示例{假设脚本部分可以在</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
答案 3 :(得分:0)
您可能会遇到语法错误,因为引号中不包含$page
,但这不是以下两个主要原因:
重写规则也应该从路径开始,因此重写规则必须是
RewriteRule ^(.*)\.html /test.shtml?$1.html