Combine RedirectMatch e ProxyPass no Apache VirtualHost

2

Eu habilitei HTTPS para um site e todas as solicitações para HTTP devem ser redirecionadas para HTTPS agora, exceto para o conteúdo de um diretório, por exemplo, /downloads .

Alterei minha configuração do VirtualHost para HTTP da seguinte forma e adicionei a configuração 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

Minha expectativa: solicitações como http://example.com/faq seriam redirecionadas para a versão HTTPS e todas as solicitações, como http://example.com/download/file.zip , ainda seriam HTTP.

Mas, obviamente, as instruções Proxy* têm maior precedência e nenhum redirecionamento ocorre.

Como eu teria que estruturar minha configuração corretamente, para que eu possa usar o RedirectMatch e, caso ele não corresponda, use a configuração Proxy* ?

    
por qqilihq 28.12.2016 / 12:39

1 resposta

2

Ok, não vi a floresta para as árvores. A solução foi tão fácil quanto:

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

Assim, as diretivas Proxy só entram em vigor para as rotas excluídas por RedirectMatch .

    
por 28.12.2016 / 12:56