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

Nod*_*ode 24 rewrite proxy html apache-2.2

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

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

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

Mer*_*erc 20

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

做您想做的事情的最简单、最强大的方法是使用Apache 过滤器

只要有:

ExtFilterDefine css_changer mode=output intype=text/html cmd="/some/php/script.php"
SetOutputFilter css_changer
Run Code Online (Sandbox Code Playgroud)

一个可能的脚本:

#!/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);
?>
Run Code Online (Sandbox Code Playgroud)

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

确保在您的 httpd.conf 中启用过滤器,如下所示:

LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so
Run Code Online (Sandbox Code Playgroud)

这个问题在谷歌排名确实靠前,而且在论坛方面并不多


Tom*_*lak 18

您可以这样做:使用 mod_rewrite 更改来自

/some/static/page.html
Run Code Online (Sandbox Code Playgroud)

/htmlinjector.php?url=/some/static/page.html
Run Code Online (Sandbox Code Playgroud)

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

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

使用 CGI 脚本修改静态内容

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

Action add-footer /cgi-bin/footer.pl
AddHandler add-footer .html
Run Code Online (Sandbox Code Playgroud)

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

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


Kyl*_*ndt 5

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

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