代码之家  ›  专栏  ›  技术社区  ›  Vagnerr

让Apache动态修改静态网页

  •  2
  • Vagnerr  · 技术社区  · 16 年前

    我一直在做实验 woopra.com

    我试图通过结合使用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将原始文件包含到响应页面中。

    谢谢

    彼得

    4 回复  |  直到 4 年前
        1
  •  2
  •   Grey Panther    16 年前

    我认为 mod_filter_ext

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

    sed

        2
  •  1
  •   Pablo Alsina    16 年前

    如果页面是静态的,为什么要动态地更改它们,而不是预处理站点上的所有页面,向每个页面添加所需的javascript?这很简单,而且可能更有效(您的页面浏览量可能比要更改的页面多)

        3
  •  0
  •   Alan Doherty    15 年前

    好的,上面的方法最大的问题是,它会通过将一个脚本标记放在 <html>

    我同意其他人对html文件(如sed/awk脚本)进行预处理

    下面是一个快速示例{假设脚本部分可以在 </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
    
        4
  •  0
  •   sth ypicasso    15 年前

    您可能有语法错误,因为 $page 不包含在引号中,但是,这不包含在引号中的两个主要原因如下:

    • 应包含以/开头的路径,在您的示例中,查询字符串应为/abc.html,而不是abc.html
    • RewriteRule ^(.*)\.html /test.shtml?$1.html