我将 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|"