2

Я настроил свой сервер 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>

У кого-нибудь есть идеи по этой проблеме?

2 ответа2

7

Вы должны быть в состоянии использовать 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 должна убедиться, что веб-сервер не отправляет сжатый ответ, который Apache не сможет заменить содержимым.

2

Для Apache> = 2.4 синтаксис FilterProvider был изменен. Я смог заставить работать следующее:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .