AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 46449
Accepted
Node
Node
Asked: 2009-07-28 04:16:57 +0800 CST2009-07-28 04:16:57 +0800 CST 2009-07-28 04:16:57 +0800 CST

如何将 HTML 代码注入到每个交付的 HTML 页面中?

  • 772

我有一个Apache web server提供静态 HTML 页面的工具。出于某种原因,我不能自己更改文件,但我仍然想将一些 HTML 注入到正在服务的每个页面中。

这可能mod_proxy吗?如果没有,有人可以推荐提供这种功能的软件吗?

编辑:我必须插入某种横幅广告(例如 a javascript)和跟踪像素。

apache-2.2 proxy rewrite html
  • 10 10 个回答
  • 48778 Views

10 个回答

  • Voted
  1. Merc
    2012-06-07T17:03:02+08:002012-06-07T17:03:02+08:00

    我不确定为什么答案列表中没有提到这一点。抱歉,如果我花了 2 年时间才看到这个问题...

    做你想做的最简单、最强大的方法是使用Apache 过滤器。

    只要有:

    ExtFilterDefine css_changer mode=output intype=text/html cmd="/some/php/script.php"
    SetOutputFilter css_changer
    

    一个可能的脚本:

    #!/usr/bin/php
    <?
    
    #phpinfo(); // Uncomment to see ALL env variables
    $host = $_ENV["HTTP_HOST"]; // www.site.com
    $script_name = $_ENV["SCRIPT_NAME"]; // /theme/green/style.css
    $pi = pathinfo($script_name);
    $type = $pi['extension'];
    #print "$host $script  $type";
    
    $stdin = STDIN;
    
    while($line = fgets($stdin)){
      $line = preg_replace('/a/', 'A', $line);
    
      fwrite(STDOUT, $line);
    }
    fclose(STDOUT);
    ?>
    

    这会将所有 "a"s 更改为 "A"s 。

    请务必在您的 httpd.conf 中启用过滤器,如下所示:

    LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so
    

    这个问题在谷歌中排名很高,在论坛方面没有太多

    • 20
  2. Best Answer
    Tomalak
    2009-07-28T04:44:11+08:002009-07-28T04:44:11+08:00

    你可以这样做:使用 mod_rewrite 来更改请求

    /some/static/page.html
    

    至

    /htmlinjector.php?url=/some/static/page.html
    

    然后使用 PHP(或任何你认为合适的)来进行文件操作。添加输出缓存以提高性能。

    作为替代方案,Apache 处理程序听起来很有帮助:

    使用 CGI 脚本修改静态内容

    以下指令将导致对带有html 扩展名的文件的请求以触发 footer.plCGI 脚本的启动。

    Action add-footer /cgi-bin/footer.pl
    AddHandler add-footer .html
    

    然后 CGI 脚本负责发送最初请求的文档(由 PATH_TRANSLATED环境变量指向)并进行所需的任何修改或添加。

    这或多或少是 mod_rewrite 方法会做的事情,只是减少了黑客攻击。

    • 18
  3. Kyle Brandt
    2009-07-28T04:25:25+08:002009-07-28T04:25:25+08:00

    这是有关如何使用mod_proxy_html编辑网页上的链接(内容)的教程。您也许可以应用此修改您想要的 html。

    更新:你确定要走这条路吗?我认为 Apache 旨在提供内容,而不是创建内容。这可能会出现在 MVC 框架的视图部分。我不推荐这样做的原因是您违反了模块化规则。您的 Web 应用程序将与为其提供服务的应用程序交织在一起,从而使未来的升级、移动等变得复杂。

    • 5
  4. Alex Lehmann
    2009-07-29T03:27:32+08:002009-07-29T03:27:32+08:00

    我宁愿用 mod_rewrite 和 SSI 来做这件事。

    首先将路径放入环境变量中

    RewriteCond %{IS_SUBREQ} 假
    RewriteRule ^(/.*\.html) /page.shtml [E=filename:$1]
    

    然后在 shtml 文件中处理它

    <!--#include virtual="$filename"-->
    

    此解决方案的部分内容基于 stackoverflow 问题: https ://stackoverflow.com/questions/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832 )

    • 4
  5. cwarden
    2012-01-27T08:47:50+08:002012-01-27T08:47:50+08:00

    mod_sed非常适合这里。例如,您可以创建一个与结束的 head 或 body 标记匹配的输出过滤器,然后在它之前插入您的 html。

    • 4
  6. Kayvan
    2012-03-15T14:26:24+08:002012-03-15T14:26:24+08:00

    您可以使用 Apache mod_substitute 使用某些标准或正则表达式将 html 注入到传出响应中。 下面是如何实现这一点的解释。

    • 2
  7. CK.
    2009-07-28T05:45:59+08:002009-07-28T05:45:59+08:00

    mod_perl 模块有用吗?

    http://search.cpan.org/~gozer/Apache2-Layout-0.6/lib/Apache2/Layout.pm

    这可能会做你想做的事,或者至少可以为你指明正确的方向。

    • 1
  8. Roy Rico
    2009-07-29T13:39:42+08:002009-07-29T13:39:42+08:00

    您可以使用下面的指令查看 apache 的页眉和页脚指令。

    <Directory "/usr/local/www/data/scott">
        Options +Indexes
        AllowOverride All
        AddOutputFilter LAYOUT html htm shtml
        LayoutComment On
        LayoutHeader /wrappers/scott-header.html
        LayoutFooter /wrappers/scott-footer.html
    </Directory>
    

    更多阅读在这里: http ://wannabe.guru.org/scott/hobbies/apache/

    • 1
  9. MohitC
    2016-04-08T01:59:58+08:002016-04-08T01:59:58+08:00

    Mod Layout 现在已经过时了,如果你不想调用外部脚本的开销,对我来说最好的解决方案是mod sed。您可以使用 mod sed 匹配文档的第一行(1s)并在那里添加标题脚本代码并匹配最后一行($s)并将页脚放在那里。

    Options Indexes FollowSymLinks Includes ExecCGI
    Order Deny,Allow
    Deny from none
    Allow from all
    Require all granted
    
    AddOutputFilter Sed html
    SetOutputFilter Sed;DEFLATE
    OutputSed "1s|^|<header code>|"
    OutputSed "$s|$|</footer code>|g"
    
    • 1
  10. Leon Kaden
    2016-02-26T07:46:06+08:002016-02-26T07:46:06+08:00

    我可以通过 Apache 将 html 插入所有页面,但仅限于由我的 apache 托管的站点,而不是通过我的 apache 代理服务器托管的所有站点。

    这就是它的工作原理。我设置了一个 XAMPP,为 apache 2.4 下载 mod_layout 5.1。(安装 mod_layout 很简单,如果你使用 XAMPP for windows,只需下载 mod_layout.so 5.1 for windows 并将其放入你的 apache 模块文件夹 $home/apache/module,然后将配置 DSO 添加到你的 httpd.conf LoadModule layout_module modules/ mod_layout.so - 如果你使用 linux 或其他操作系统,你应该下载 mod_layout.so for linux,然后运行 ​​make 命令安装)

    在为 windows 安装 mod_layout.so 后,只需将此代码放在您的 .htaccess 文件或 httpd.conf 中,您将获得 html 插入到您的所有页面:

    <IfModule mod_layout.c>
    AddOutputFilter LAYOUT html 
    AddOutputFilter LAYOUT htm 
    AddOutputFilter LAYOUT shtml 
    AddOutputFilter LAYOUT shtm 
    AddOutputFilter LAYOUT cgi 
    AddOutputFilter LAYOUT php 
    LayoutFooter "C:/xampp/apache/cgi-bin/footer.php"
    </IfModule>
    

    C:/xampp/apache/cgi-bin/footer.php 是您放置 html 或 php 文件的位置,在我的情况下是 C:/xampp/apache/cgi-bin/footer.php,但您可以将其放在任何位置,只要给正确的路径,你会没事的

    • 0

相关问题

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve