在 Apache VirtualHost 中结合 RedirectMatch 和 ProxyPass

在 Apache VirtualHost 中结合 RedirectMatch 和 ProxyPass

我已经为网站启用了 HTTPS,现在所有对 HTTP 的请求都应重定向到 HTTPS,除了对于一个目录的内容,例如/downloads

我按如下方式更改了 HTTP 的 VirtualHost 配置并添加了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*设置?

答案1

好吧,只见树木不见森林。解决方案很简单:

<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>

因此,代理指令仅对被排除的路线生效RedirectMatch

相关内容