Мод Apache2_заменитель не работает в

У меня есть рабочий обратный прокси, который активен только в определенном месте на моем сайте, в данном случае, например: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>, но это не сработало

I затем попытался добавить это

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 работает, просто кажется, что замена игнорируется.

1
задан 26 May 2020 в 14:06
2 ответа

Я рад сообщить, что есть способ обойти проблему интерполяции, по крайней мере, с проблемой подстановки.

Много результатов google для интерполяции с mod_substitute приходят сюда, так что я решил помочь. Это действительно возможно сделать что-то вроде этого:

## These modules are required
LoadModule filter_module modules/mod_filter.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule env_module modules/mod_env.so

## Must be done in vhost directive
<VirtualHost:*:80>
PassEnv HOSTNAME_ENV_VARIABLE_NAME
Define SUBSTITUTE_STRING "s|http://hardcoded-url|http://${HOSTNAME_ENV_VARIABLE_NAME}|i"

<Location /my-path-here-wut-wut/>
        AddOutputFilterByType SUBSTITUTE my/mime-type-here
        Substitute "${SUBSTITUTE_STRING}"
</Location>


</VirtualHost>

При посещении /my-path-here-wut-wut/, который возвращает HTML, содержащий http://hardcoded-url, он будет заменен наhttp://<HOSTNAME_ENV_VARIABLE_NAME>

1
ответ дан 21 September 2021 в 11:11

Единственное решение, которое у меня работало, это:

AddOutputFilterByType INFLATE;SUBSTITUTE;DEFLATE text/html

Источник:

0
ответ дан 25 November 2021 в 10:17

Теги

Похожие вопросы