J'essaie de rediriger https://www.example.com vers http://www.example.com . J'ai essayé le code suivant dans le fichier .htaccess
RewriteEngine On
RewriteCond %{HTTP_Host} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
Ce code redirige avec succès https://example.com vers http://www.example.com . Cependant, lorsque je tape https://www.example.com , une erreur "page Web non disponible" s'affiche dans le navigateur.
J'ai également essayé les 2 codes suivants sans succès
Tentative 1
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L]
Tentative 2
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI}
Les deux tentatives ci-dessus ont échoué. Aucune suggestion?
La tentative 2 était proche de la perfection. Il suffit de le modifier légèrement:
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
Toutefois, si votre site Web ne possède pas de certificat de sécurité, il repose sur un environnement d'hébergement partagé et vous ne souhaitez pas recevoir l'avertissement lorsque votre site Web est demandé via https, vous ne pouvez pas le rediriger à l'aide de htaccess. La raison en est que le message d'avertissement est déclenché avant même que la demande ne parvienne au fichier htaccess, vous devez donc le corriger sur le serveur. Allez à /etc/httpd/conf.d/ssl.conf et commentez la partie concernant le serveur virtuel 443. Cependant, il est probable que votre fournisseur d'hébergement ne vous donnera pas autant de contrôle. Il vous faudra donc soit changer d’hôte, soit acheter le protocole SSL, pour que l’avertissement ne se déclenche pas avant que votre htaccess ait une chance de se rediriger.
RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
Vous pouvez utiliser la règle suivante pour rediriger de https vers http :
RewriteEngine On
RewriteCond %{HTTPS} ^on$
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]
Explication:
RewriteCond %{HTTPS} ^on$
Vérifie si le protocole HTTPS est sur (la demande est effectuée à l'aide de https)
Alors
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R]
Rediriger toute demande ( https://example.com/foo ) vers http: // example. com/toto .
$ 1 fait partie de l'expression rationnelle dans le modèle RewriteRule, il contient la valeur capturée dans (. +) . Dans ce cas, il capture tout le nombre total request_uri après le nom de domaine.
[NC, L, R] sont les drapeaux, NC rend la casse sensible, vous pouvez utiliser des lettres majuscules ou minuscules dans la demande.
L'indicateur L indique au serveur de cesser de traiter d'autres règles si la règle actuelle est identique, il est important d'utiliser l'indicateur L pour éviter les conflits de règles lorsque vous avez plus de règles dans un bloc.
L'indicateur R est utilisé pour effectuer une redirection externe.
La différence entre http et https réside dans le fait que les demandes https sont envoyées via une connexion cryptée par SSL. La connexion cryptée SSL doit être établie entre le navigateur et le serveur avant que le navigateur n'envoie la demande http.
Les requêtes HTTP sont en fait des requêtes http envoyées via une connexion cryptée SSL. Si le serveur refuse d'établir une connexion cryptée SSL, le navigateur n'aura pas de connexion pour envoyer la demande. Le navigateur et le serveur n'auront aucun moyen de se parler. Le navigateur ne pourra pas envoyer l'URL à laquelle il veut accéder et le serveur ne pourra pas répondre avec une redirection vers une autre URL.
Donc ce n'est pas possible. Si vous souhaitez répondre aux liens https, vous avez besoin d'un certificat SSL.
RewriteCond %{HTTP:X-Forwarded-Proto} =https
Votre code est correct. Il suffit de les mettre à l'intérieur du <VirtualHost *:443>
Exemple:
<VirtualHost *:443>
SSLEnable
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_Host}%{REQUEST_URI}
</VirtualHost>