La redirection de site Web fonctionne par intermittence dans Firefox mais ne fonctionne pas du tout dans IE [dupliquer]

Apr 04 2020

Après quelques tentatives d'erreur dans la redirection de site Web, j'arrive à effectuer la redirection de site Web mais cela fonctionne par intermittence dans Firefox mais ne fonctionne pas du tout dans IE. J'arrive à vider tout le cache et à réessayer dans Firefox et cela fonctionne, mais bizarrement, cela ne fonctionne pas après cela. J'ai confirmé que je n'effectuais aucune modification sur aucun fichier à ce moment-là. Quelqu'un a-t-il déjà eu une idée ou fait face à cela? J'étais tellement heureux que mon site Web redirige enfin même si j'étais heureux comme 2 minutes, puis il s'est avéré qu'il n'était plus redirigé. : ((J'en ai juste besoin pour rediriger lorsque je tape http://example.com, il redirige vers https://www.example.com Voici ma redirection dans le fichier .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]

Voici mes journaux:

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]

J'ai également constaté que mon site Web ne redirige que lorsque je me déconnecte du VPN (j'ai besoin d'un VPN pour pouvoir me connecter au serveur pour réparer ou obtenir les informations que j'ai faites pour la redirection)

Voici l'élément que j'ai ajouté dans le fichier .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]

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

Mon certificat SSL a été configuré dans httpd-ssl.conf donc je pointe mon httpd-vhosts.conf comme VirtualHost *: 80 Voici mon 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>

Mise à jour

Voici ce que je mets à jour dans .htaccess en ajoutant [OU]:

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

Et ci-dessous sont les journaux que j'ai obtenus:

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]

Je l'ai réessayé dans le navigateur mais il n'a pas été redirigé. J'essaie également de déboguer dans Firefox et l'hôte que j'ai obtenu est example.com

C'est ce que j'ai obtenu en supprimant [OR]

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

Journaux:

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

S'il vous plaît, dites-moi que ma redirection fonctionne parce que je travaille dans ce domaine depuis des mois et que je ne suis plus d'idée maintenant (j'espère que ce n'est pas à cause de ma stupide erreur ... prier!). S'il vous plaît aidez-moi et merci d'avance!

Réponses

3 EsaJokinen Apr 04 2020 at 16:56

Je crois que vous ne voulez pas vraiment cette condition:

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

Parce que cela provoquerait une boucle de redirection infinie vers lui-même, étant donné que cela vient du .htaccessqui s'applique également à la https://wwwversion:

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

Je crois que c'est un caractère d'espace manquant. Veuillez changer ceci:

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

pour ça:

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

Vos entrées de fichier journal ont prouvé que http://www.example.com a été réécrit avec succès en https://www.example.com/ . Ils n'ont rien prouvé sur http://example.com . L'ajout du caractère espace devrait corriger ce dernier.

1 dexter Apr 04 2020 at 18:10

Au lieu de cela, mod_rewritevous devriez utiliser quelque chose comme ça dans la définition de Virtualhost:

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

Selon la documentation Apache httpd .

mod_rewrite doit être considéré comme un dernier recours, lorsque d'autres alternatives sont jugées insuffisantes. Son utilisation lorsqu'il existe des alternatives plus simples conduit à des configurations déroutantes, fragiles et difficiles à maintenir.