我有一个Apache web server
提供静态 HTML 页面的工具。出于某种原因,我不能自己更改文件,但我仍然想将一些 HTML 注入到正在服务的每个页面中。
这可能mod_proxy
吗?如果没有,有人可以推荐提供这种功能的软件吗?
编辑:我必须插入某种横幅广告(例如 a javascript
)和跟踪像素。
我有一个Apache web server
提供静态 HTML 页面的工具。出于某种原因,我不能自己更改文件,但我仍然想将一些 HTML 注入到正在服务的每个页面中。
这可能mod_proxy
吗?如果没有,有人可以推荐提供这种功能的软件吗?
编辑:我必须插入某种横幅广告(例如 a javascript
)和跟踪像素。
我不确定为什么答案列表中没有提到这一点。抱歉,如果我花了 2 年时间才看到这个问题...
做你想做的最简单、最强大的方法是使用Apache 过滤器。
只要有:
一个可能的脚本:
这会将所有 "a"s 更改为 "A"s 。
请务必在您的 httpd.conf 中启用过滤器,如下所示:
这个问题在谷歌中排名很高,在论坛方面没有太多
你可以这样做:使用 mod_rewrite 来更改请求
至
然后使用 PHP(或任何你认为合适的)来进行文件操作。添加输出缓存以提高性能。
作为替代方案,Apache 处理程序听起来很有帮助:
这或多或少是 mod_rewrite 方法会做的事情,只是减少了黑客攻击。
这是有关如何使用mod_proxy_html编辑网页上的链接(内容)的教程。您也许可以应用此修改您想要的 html。
更新:你确定要走这条路吗?我认为 Apache 旨在提供内容,而不是创建内容。这可能会出现在 MVC 框架的视图部分。我不推荐这样做的原因是您违反了模块化规则。您的 Web 应用程序将与为其提供服务的应用程序交织在一起,从而使未来的升级、移动等变得复杂。
我宁愿用 mod_rewrite 和 SSI 来做这件事。
首先将路径放入环境变量中
然后在 shtml 文件中处理它
此解决方案的部分内容基于 stackoverflow 问题: https ://stackoverflow.com/questions/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832 )
mod_sed非常适合这里。例如,您可以创建一个与结束的 head 或 body 标记匹配的输出过滤器,然后在它之前插入您的 html。
您可以使用 Apache mod_substitute 使用某些标准或正则表达式将 html 注入到传出响应中。 下面是如何实现这一点的解释。
mod_perl 模块有用吗?
http://search.cpan.org/~gozer/Apache2-Layout-0.6/lib/Apache2/Layout.pm
这可能会做你想做的事,或者至少可以为你指明正确的方向。
您可以使用下面的指令查看 apache 的页眉和页脚指令。
更多阅读在这里: http ://wannabe.guru.org/scott/hobbies/apache/
Mod Layout 现在已经过时了,如果你不想调用外部脚本的开销,对我来说最好的解决方案是mod sed。您可以使用 mod sed 匹配文档的第一行(1s)并在那里添加标题脚本代码并匹配最后一行($s)并将页脚放在那里。
我可以通过 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 插入到您的所有页面:
C:/xampp/apache/cgi-bin/footer.php 是您放置 html 或 php 文件的位置,在我的情况下是 C:/xampp/apache/cgi-bin/footer.php,但您可以将其放在任何位置,只要给正确的路径,你会没事的