Apache 作为代理替换 html 代码/标签/文本

xmu*_*mux 2 linux html apache-http-server proxy sed

我将我的 Apache 服务器配置为代理服务器。我在proxy.conf文件中添加了一些过滤器以更改网站的文本(HTML 源代码)。

示例代码:

ExtFilterDefine foodo mode=output intype=text/html
cmd="/bin/sed -r 's/foo/newfoo/g'" 
SetOutputFilter foodo
Run Code Online (Sandbox Code Playgroud)

我也为此启用了所有可能的模组。( mod_proxy, mod_proxy_html, ...)

在我曾经也mod_sed更改过一些文本之后,但我仍然没有积极的解决方案。

<Directory "/var/www/docs/sed"> 
    AddOutputFilter Sed html 
    OutputSed "s/monday/MON/g" 
    OutputSed "s/sunday/SUN/g" 
</Directory>
Run Code Online (Sandbox Code Playgroud)

这是我的proxy.conf:

ProxyRequests On
ProxyVia On
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from all
</Proxy>
Run Code Online (Sandbox Code Playgroud)

有没有人对这个问题有任何想法?

mta*_*tak 7

您应该能够使用mod_substitute。在您的代理配置中,添加:

AddOutputFilterByType SUBSTITUTE text/html
Substitute "s/foo/bar/ni"
Run Code Online (Sandbox Code Playgroud)


我使用以下配置使其工作:

<VirtualHost *:80>
        ServerName su-test.int.mtak.nl

        ProxyRequests Off
        ProxyPreserveHost Off
        ProxyPass       / http://mtak.nl/
        ProxyPassReverse / http://mtak.nl/
        RequestHeader unset Accept-Encoding

        FilterDeclare CUSTOMFILTER
        FilterProvider CUSTOMFILTER SUBSTITUTE resp=Content-Type $*
        FilterProvider CUSTOMFILTER SUBSTITUTE resp=Content-Type $/html

        <Location />
                FilterChain CUSTOMFILTER
                Substitute "s|foo|bar|ni"
        </Location>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

该行RequestHeader unset Accept-Encoding是为了确保网络服务器不发送 gzip 响应,Apache 将无法替换其中的内容。

  • 在我刚刚用 &lt;Location /&gt; AddOutputFilterByType SUBSTITUTE text/html Substitute s/foo/bar/ni &lt;/Location&gt; 更新了我的 proxy.conf 之后,你对这个“RequestHeader unset Accept-Encoding”是完全正确的,它就起作用了!非常感谢!如果需要,您可以将答案更改为普通替代示例。 (2认同)