web-dev-qa-db-ja.com

プロキシとしてのApacheがhtmlコード/タグ/テキストを置き換えます

Apacheサーバーをプロキシサーバーとして構成しました。 proxy.confファイルにいくつかのフィルターを追加して、Webサイトのテキスト(HTMLソースコード)を変更しました。

コード例:

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

私はそのために可能なすべての改造も有効にしました。 (mod_proxymod_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>

誰かがこの問題について何か考えを持っていますか?

2
xmux

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はその内容を置き換えることができなくなります。

7
mtak

Apache> = 2.4の場合、FilterProvider構文が変更されました。私は以下を機能させることができました:

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