Назад | Перейти на главную страницу

Объедините RedirectMatch и ProxyPass в Apache VirtualHost

Я включил HTTPS для сайта, и теперь все запросы к HTTP должны быть перенаправлены на HTTPS, Кроме для содержимого одного каталога, например /downloads.

Я изменил конфигурацию VirtualHost для HTTP следующим образом и добавил RedirectMatch настройка:

<VirtualHost *:80>
        ServerName              example.com
        RedirectMatch           302 ^/(?!download/).*$ https://example.com$1
        ProxyPreserveHost       On
        ProxyRequests           Off
        ProxyPass               /       http://10.0.0.11:3000/
        ProxyPassReverse        /       http://10.0.0.11:3000/
</VirtualHost>

# configuration for HTTPS down here, working fine

Мое ожидание: такие запросы, как http://example.com/faq будут перенаправлены на версию HTTPS, и все запросы, такие как http://example.com/download/file.zip все равно будет HTTP.

Но очевидно, что Proxy* инструкции имеют более высокий приоритет, и никакого перенаправления не происходит.

Как мне правильно структурировать свою конфигурацию, чтобы я мог использовать RedirectMatch, и если он не совпадает, использует Proxy* установка?

Ладно, за деревьями леса не видел. Решение было простым:

<VirtualHost *:80>
        ServerName              example.com
        RedirectMatch           302 ^/(?!download/).*$ https://example.com$1
        ProxyPreserveHost       On
        ProxyRequests           Off
        ProxyPass               /download/       http://10.0.0.11:3000/download/
        ProxyPassReverse        /download/       http://10.0.0.11:3000/download/
</VirtualHost>

Таким образом, директивы Proxy действуют только для маршрутов, которые исключены RedirectMatch.