O redirecionamento de site funciona intermitentemente no Firefox, mas não funciona no IE [duplicado]

Apr 04 2020

Depois de algumas tentativas de erro de redirecionamento de site, consigo realizar o redirecionamento de site, mas ele funciona intermitentemente no Firefox, mas não funciona no IE. Consigo limpar todo o cache e tentar novamente no Firefox e funciona, mas estranhamente não funciona depois disso. Eu confirmei que não estava fazendo nenhuma alteração em nenhum arquivo naquele momento. Alguém teve alguma ideia ou já enfrentou isso antes? Eu estava tãããão feliz que meu site finalmente redirecionou, mesmo eu fiquei feliz por 2 minutos, então descobri que não havia redirecionamento novamente. : (Eu só preciso redirecionar quando digito http://example.com ele redireciona para https://www.example.com Abaixo está meu redirecionamento no arquivo .htaccess:

RewriteEngine On
#Options +FollowSymLinks
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$[OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Abaixo estão meus logs:

init rewrite engine with requested uri /
pass through /
[perdir D:/wamp64/www/example/] strip per-dir prefix: D:/wamp64/www/example/ -> 
[perdir D:/wamp64/www/example/] applying pattern '.*' to uri ''
[perdir D:/wamp64/www/example/] RewriteCond: input='off' pattern='!on' => matched
[perdir D:/wamp64/www/example/] RewriteCond: input='www.example.com' pattern='^www\\.example\\.com$' => matched
[perdir D:/wamp64/www/example/] rewrite '' -> 'https://www.example.com/'
[perdir D:/wamp64/www/example/] explicitly forcing redirect with https://www.example.com/
[perdir D:/wamp64/www/example/] escaping https://www.example.com/ for redirect
[perdir D:/wamp64/www/example/] redirect to https://www.example.com/ [REDIRECT/301]

Também descobri que meu site só redireciona quando eu saio da VPN (preciso da VPN para poder me conectar ao servidor para consertar ou obter as informações que fiz para o redirecionamento)

Abaixo está o item que adicionei no arquivo .htaccess:

    RewriteCond %{HTTPS} !on [OR]
    RewriteCond %{HTTP_HOST} ^example\.com$
    RewriteCond %{HTTP_HOST] ^www\.example\.com$
    RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Abaixo estão meus httpd-vhosts.conf:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "d:/wamp64/www/example"
    <Directory  "d:/wamp64/www/example/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </Directory>
</VirtualHost>

Meu certificado SSL foi configurado em httpd-ssl.conf, então aponto meu httpd-vhosts.conf como VirtualHost *: 80 Abaixo estão meus httpd-vhosts.conf:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot "d:/wamp64/www/example"
    <Directory  "d:/wamp64/www/example/">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
        Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
    </Directory>
</VirtualHost>

Atualizar

Abaixo está o que eu atualizo em .htaccess adicionando [OU]:

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

E abaixo estão os logs que consegui:

strip per-dir prefix: D:/wamp64/www/example/ -> 
applying pattern '.*' to uri ''
RewriteCond: input='off' pattern='!on' => matched
rewrite '' -> 'https://www.example.com/'
explicitly forcing redirect with https://www.example.com/
escaping https://www.example.com/ for redirect
redirect to https://www.example.com/ [REDIRECT/301]

Tentei novamente no navegador, mas não foi redirecionado. Eu também tento depurar no firefox e o host que obtive é example.com

Isso é o que eu consegui removendo [OR]

RewriteCond %{HTTPS} !on 
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]

Histórico:

RewriteCond: input='off' pattern='!on' => matched
RewriteCond: input='www.example.com' pattern='^example\\.com$' => not-matched

Por favor, me diga que meu redirecionamento está funcionando porque estou trabalhando nisso há meses e agora estou perdendo a ideia (espero que não seja por causa do meu erro bobo ... orando!). Por favor me ajude e agradeço antecipadamente!

Respostas

3 EsaJokinen Apr 04 2020 at 16:56

Eu acredito que você realmente não quer esta condição:

RewriteCond %{HTTP_HOST} ^www\.example\.com$

Porque isso causaria um loop de redirecionamento infinito para si mesmo, dado que é do .htaccessque se aplica à https://wwwversão também:

RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
2 liverwust Apr 04 2020 at 16:49

Eu acredito que é um personagem espacial ausente. Por favor, mude isso:

RewriteCond %{HTTP_HOST} ^example\.com$[OR]

para isso:

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]

As entradas do arquivo de registro provaram que http://www.example.com foi reescrito com sucesso para https://www.example.com/ . Eles não provaram nada sobre http://example.com . Adicionar o caractere de espaço deve corrigir o último.

1 dexter Apr 04 2020 at 18:10

Em vez de mod_rewriteusar algo assim na definição do Virtualhost:

ServerName  www.example.com
ServerAlias example.com
Redirect permanent / https://www.example.com/

De acordo com a documentação do Apache httpd .

mod_rewrite deve ser considerado um último recurso, quando outras alternativas forem consideradas insuficientes. Usá-lo quando existem alternativas mais simples leva a configurações que são confusas, frágeis e difíceis de manter.