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