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

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

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

示例代码:

ExtFilterDefine foodo mode=output intype=text/html
cmd="/bin/sed -r 's/foo/newfoo/g'" 
SetOutputFilter foodo

我还启用了所有可能的模式。(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>

这是我的proxy.conf:

ProxyRequests On
ProxyVia On
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from all
</Proxy>

有人知道这个问题吗?

答案1

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

AddOutputFilterByType SUBSTITUTE text/html
Substitute "s/foo/bar/ni"


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

<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>

此行RequestHeader unset Accept-Encoding是为了确保 Web 服务器不会发送经过 gzip 压缩的响应,因为 Apache 无法替换该响应的内容。

答案2

对于 Apache >= 2.4,FilterProvider语法已更改。我能够使以下内容正常工作:

FilterProvider CUSTOMFILTER SUBSTITUTE "%{CONTENT_TYPE} =~ m|^text/html|"

相关内容