mod_rewrite da porta http XXXX para a porta https da XXX

1

Não consigo trabalhar com o mod_rewrite com as seguintes regras.

RewriteCond "%{SERVER_NAME}" "home.myhome.net"
RewriteCond "%{SERVER_PORT}" "^4388$"
RewriteRule (.*) https://home.myhome.net:4389%{REQUEST_URI} [QSA,R=301,L]

Esta regra é definida na minha seção de host virtual http. O problema é que o redirecionamento só funciona na primeira vez. Na segunda vez que eu insiro um URL diferente na porta http 4388, sou redirecionado para o link : //home.myhome.net: 438 8 / ...

por exemplo:

  • primeiro eu entro link eu sou redirecionado para link
  • na próxima vez que eu digitar link e ser redirecionado para http s : // home. myhome.net:438 8 / pageB

Alguma ideia de como corrigir isso?

Meus detalhes do sistema operacional:

root@host:~# dpkg -l|grep apache
ii  apache2                                     2.4.18-2ubuntu3.5                            amd64        Apache HTTP Server
ii  apache2-bin                                 2.4.18-2ubuntu3.5                            amd64        Apache HTTP Server (modules and other binary files)
ii  apache2-data                                2.4.18-2ubuntu3.5                            all          Apache HTTP Server (common files)
ii  apache2-utils                               2.4.18-2ubuntu3.5                            amd64        Apache HTTP Server (utility programs for web servers)
ii  python-certbot-apache                       0.17.0-1+ubuntu16.04.1+certbot+1             all          Apache plugin for Certbot
root@host:~# lsb_release -d
Description:    Ubuntu 16.04.3 LTS

Esse é o meu Virtual Host Config, é algo diferente porque fiz mais alguns testes, mas mesmo comportamento. Também deixei de testar todas as outras regras de reescrita, com o mesmo resultado (e como eu disse nos comentários, para cada teste eu libero o cache do meu navegador).

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/html

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond "%{SERVER_NAME}" "home.myhome.net"
        RewriteCond "%{SERVER_PORT}" "^4388$"
        RewriteRule ^ https://%{SERVER_NAME}:4389%{REQUEST_URI} [noescape,qsappend,redirect=301,last]
    </IfModule>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ah, e esqueci de dizer que esse servidor está atrás de um NAT Gateway, que faz um encaminhamento de porta da porta externa 4388 para a porta host interna 80 e também da porta externa 4389 para a porta interna 443. É por isso que preciso verificar para que a porta e o nome do host correspondam apenas ao tráfego externo.

EDIT : Ok, eu encontrei algo, mas também não tenho uma solução: Eu comparei o primeiro e o seguinte pedido / resposta do navegador com a guia de ferramentas do desenvolvedor do navegador - > rede:

O primeiro pedido deu-me o " 301 movido permanentemente ", mas o seguinte pedido me dá um " 307 Redirecionamento Interno ".

Então, isso parece um problema do servidor. A pergunta é apenas, se é um bug no mod_rewrite ou é minha culpa, porque a regra não está bem.

EDIT : Eu testei agora também com a versão atual do apache 2.4.27-5.1 + ubuntu16.04.1 + deb.sury.org + 1 de Apache PPA de Ondřej Surý

Atenciosamente, Thomas

    
por Thomas 26.09.2017 / 11:16

1 resposta

1

Ok, depois de uma longa busca, finalmente encontrei o motivo. Eu defini o HTTP Strict-Transport-Security (HSTS) no meu site https, e é por isso que o navegador não inicia novamente para abrir um site http nesse URL e forçar o protocolo https.

Os exemplos dados estão todos funcionando.

    
por 26.09.2017 / 23:26