У меня есть рабочий обратный прокси-сервер, который активен только в определенном месте на моем сайте, например, в этом случае: www.example.com/reverseproxy/site1
Я использую обратное проксирование site1. Я хочу заменить какую-то часть тела каждой проксированной страницы, поэтому я попытался использовать mod_substitute, проблема в том, что я не могу заставить его работать под <Location /reverseproxy>
Это мой httpd (SSL включен):
<VirtualHost _default_:443>
ProxyPassInterpolateEnv On
RewriteEngine On
... Some rewrite rules
RewriteRule /?reverseproxy/http(s*):/([^\/]*)/*(.*) "http$1://$2/$3" [P]
SSLProxyEngine On
ProxyPassReverse "/reverseproxy/http${ssl}://${page}" http${ssl}://${page} interpolate
SetOutputFilter INFLATE;proxy-html;SUBSTITUTE;DEFLATE;
ProxyHTMLInterp On
ProxyHTMLExtended Off
...Some ProxyURLMap
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<body>|<body1>|"
</VirtualHost>
Этот заменитель работает, но он применим ко всем страницам, а не только к /reverseproxy
. Когда я пытаюсь вставить это <Location /reverseproxy>
не работает, просто игнорирует:
<Location /reverseproxy>
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<body>|<body1>|"
</Location>
Я пробовал добавить
RequestHeader unset Accept-Encoding
вне <Location>
тег, но это не сработало
Я попытался добавить это
SetOutputFilter SUBSTITUTE;DEFLATE
в <Location /reverseproxy>
пометить но не повезло
И, как кто-то предложил, попробовал с этой цепочкой фильтров
FilterDeclare filter
FilterProvider filter SUBSTITUTE "%{CONTENT_TYPE} =~ m|^text/html|"
FilterDeclare unpackGZIP
FilterProvider unpackGZIP INFLATE "resp('Content-Encoding') == 'gzip'"
<Location /reverseproxy>
FilterChain unpackGZIP filter DEFLATE
Все остальное внутри Location работает, просто вроде игнорирует подстановку.