La redirección de sitios web funciona de forma intermitente en Firefox pero no funciona en absoluto en IE [duplicado]

Apr 04 2020

Después de algunos intentos de error en la redirección del sitio web, logro realizar la redirección del sitio web, pero funciona de forma intermitente en Firefox, pero no funciona en absoluto en IE. Me las arreglo para borrar todo el caché y volver a intentarlo en Firefox y funciona, pero extrañamente no funciona después de eso. Confirmé que no estaba haciendo ningún cambio en ningún archivo en ese momento. ¿Alguien tuvo alguna idea o se enfrentó a esto antes? Estaba taaaan feliz de que mi sitio web finalmente redirigiera, incluso yo estaba feliz como 2 minutos y luego parece que no fue redirigido nuevamente. : ((Solo lo necesito para redirigir cuando escribo http://example.com , redirige a https://www.example.com A continuación se muestra mi redirección en el archivo .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]

A continuación se muestran mis registros:

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]

También descubrí que mi sitio web solo redirige cuando salgo de VPN (necesito VPN para poder conectarme al servidor para arreglar u obtener la información que hice para la redirección)

A continuación se muestra el elemento que agregué en el archivo .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]

A continuación se muestran mis 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>

Mi certificado SSL se configuró en httpd-ssl.conf, así que apunto mi httpd-vhosts.conf como VirtualHost *: 80 A continuación se muestran mis 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>

Actualizar

A continuación se muestra lo que actualizo en .htaccess agregando [O]:

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

Y a continuación están los registros que obtuve:

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]

Lo intenté de nuevo en el navegador pero no fue redirigido. También trato de depurar en Firefox y el host que tengo es example.com

Esto es lo que obtuve al eliminar [OR]

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

Registros:

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

Por favor, dígame que mi redirección está funcionando porque he estado trabajando en esto durante meses y ahora no tengo idea (espero que no sea por mi tonto error ... ¡orando!). ¡Por favor ayúdame y gracias de antemano!

Respuestas

3 EsaJokinen Apr 04 2020 at 16:56

Creo que en realidad no quieres esta condición:

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

Porque eso causaría un bucle de redireccionamiento infinito a sí mismo, dado que esto también se .htaccessaplica a la https://wwwversión:

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

Creo que es un personaje espacial faltante. Por favor cambie esto:

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

a esto:

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

Las entradas del archivo de registro demostraron que http://www.example.com se reescribió correctamente en https://www.example.com/ . No probaron nada sobre http://example.com . Agregar el carácter de espacio debería arreglar este último.

1 dexter Apr 04 2020 at 18:10

En lugar de mod_rewrite, debería usar algo como esto en la definición de Virtualhost:

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

Según la documentación httpd de Apache .

mod_rewrite debe considerarse un último recurso, cuando otras alternativas se consideran deficientes. Usarlo cuando hay alternativas más simples conduce a configuraciones que son confusas, frágiles y difíciles de mantener.