Я включил 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
.