通过apache服务器内的服务器端过滤动态包含piwik代码

通过apache服务器内的服务器端过滤动态包含piwik代码,apache,filter,substitution,matomo,inclusion,Apache,Filter,Substitution,Matomo,Inclusion,经过几个小时的徒劳尝试后,我想请大家通过一个简单的设置提供一些帮助: 对于我使用apache2 http服务器运行的一系列web应用程序和站点,我使用它进行简单的统计概述。那很好。让我烦恼的是,每增加一个应用程序/页面和每次更新/升级,我都必须注意手动维护piwik需要包含在html标记中的javascript代码 为了简化维护,我想让apache添加代码:我想使用一些apache模块:mod_filter、mod_env、mod_replacement和mod_include。其思想是通过过滤

经过几个小时的徒劳尝试后,我想请大家通过一个简单的设置提供一些帮助:

对于我使用apache2 http服务器运行的一系列web应用程序和站点,我使用它进行简单的统计概述。那很好。让我烦恼的是,每增加一个应用程序/页面和每次更新/升级,我都必须注意手动维护piwik需要包含在html标记中的javascript代码

为了简化维护,我想让apache添加代码:我想使用一些apache模块:mod_filter、mod_env、mod_replacement和mod_include。其思想是通过过滤器将所有交付的html文件注入piwik代码。该筛选器使用替换在
标记前面加上占位符。该占位符也是由服务器端包含处理的sgml标记。该包含最终用piwik代码替换占位符,piwik代码以动态方式提供所需的数字站点id

因此,在配置新虚拟主机时,只需在apache配置中指定两行代码:

  • 包括存储在小文件中的过滤器设置
  • 通过设置环境变量指定数字piwik站点id
  • 不再在应用程序中摆弄模板文件


    我非常接近一个解决方案,缺少一个步骤

    也许你们中的一些大师发现了我所缺少的东西


    虚拟主机的配置(非常简单):

    <VirtualHost *:80>
    ServerAdmin www@domain.here
    ServerName some.domain.here
    
    # include local piwik setup
    SetEnv PIWIK_ID 5
    Include /etc/apache2/vhosts.d/_internal.inc
    
    DocumentRoot /some/path/here
    <Directory  "/some/path/here">
        Options None
        AllowOverride none
        Order allow,deny  
        Allow from all    
    </Directory>
    
    </VirtualHost>
    
    到目前为止,我的工作是:

    • 基于php的动态piwik-scniplet正在工作,我可以用浏览器调用它,并查看html标记源代码中的代码,其中包含一个从配置中定义的环境变量中获取的数字id,用于测试。另外,当我以这种方式指定nin数字id时,我会得到预期的占位符
    • 过滤器通常起作用(已应用):用占位符替换
      标记。我可以通过注释FilterProvider并在开头添加INCLUDES指令来检查这一点。在这种情况下,我会在生成的html标记中看到占位符
    • 该FilterProvider实际上是由apache识别和执行的:在我发现配置中缺少的
      Options+Includes
      等错误之前,apache不再抱怨了。当上面提到的FilterProvider没有被注释掉时,占位符也会再次被删除。所以我假设include过程正在工作
    • 问题不在于服务器端包含引用了php脚本。我没有收到错误消息,使用静态文件进行的测试没有显示任何差异

    似乎安装工作正常,没有抛出错误,重写日志中没有任何奇怪的内容。然而,尽管include过滤器可以正常工作,但我希望包含的内容是空的。第一个替换步骤插入的占位符将再次替换为第二个包含步骤。但不幸的是,它被空内容删除了。我不知道为什么

    似乎是个好主意。。但是ajax加载的数据呢?向xml或json中添加返回值可能是错误的,从而使数据无效

    你试过了吗

    <?php include (filewithpiwik); ?>
    
    
    

    或者更好的是,如果你能使用Wordpress,有一个自动添加到所有页面的工具。

    好的,我自己找到了答案。这是我第六次尝试去挖掘它,最后我成功了。我所要做的就是更改过滤器代码的定义和用法。其他一切都很好:

    FilterDeclare PIWIK_token
    FilterProvider PIWIK_token SUBSTITUTE resp=Content-Type $text/html
    SUBSTITUTE 's|</body>|<!--#include virtual="/piwik" --></body>|ni'
    FilterDeclare PIWIK_code
    FilterProvider PIWIK_code INCLUDES resp=Content-Type $text/html
    FilterChain PIWIK_token PIWIK_code
    
    FilterDeclare PIWIK_令牌
    FilterProvider PIWIK_令牌替换resp=内容类型$text/html
    替换为“s | | | ni”
    FilterDeclare PIWIK_码
    FilterProvider PIWIK_代码包括resp=内容类型$text/html
    过滤器链PIWIK_令牌PIWIK_代码
    
    我很惊讶没有其他人尝试这样的东西。现在,我可以手动删除所有插入的脚本片段和许多地方,而无需在升级或添加页面或整个站点时再次考虑它们。我所需要的就是使用上面提到的两行指定站点piwik id。太好了

    2013年1月23日更新:

    我已经使用这个解决方案几个星期了,在设置上没有遇到任何问题。所以我做了一个简短的描述。也许这有助于某人:


    >

    过滤器仅在两种情况下适用:1.)输出类型为
    text/html
    ,因此不会触动json和stuff;2.)输出包含结束正文标记,因此不会触动html snipplets。我认为那是安全的。关于包容:这是可能的。这是通常的做法。这正是我开始尝试的原因,因此代码会自动包含。我有不同的网站作为书面,根据不同的代码,自行编写的例程和静态页面。在这里,插件不是解决方案,它是错误的方法。谢谢你思考我的问题,但这不是答案。
    <?php include (filewithpiwik); ?>
    
    FilterDeclare PIWIK_token
    FilterProvider PIWIK_token SUBSTITUTE resp=Content-Type $text/html
    SUBSTITUTE 's|</body>|<!--#include virtual="/piwik" --></body>|ni'
    FilterDeclare PIWIK_code
    FilterProvider PIWIK_code INCLUDES resp=Content-Type $text/html
    FilterChain PIWIK_token PIWIK_code