web-dev-qa-db-fra.com

Comment rediriger HTTPS vers HTTP derrière un proxy (CloudFlare)

Je veux rediriger les HTTP vers HTTP, j'ai essayé de suivre le code dans le fichier .htaccess

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

J'ai également essayé le code suivant dans le fichier .httaccess, qui ne fonctionnait pas non plus.

Options +FollowSymlinks

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{SERVER_PORT} ^443$
    RewriteRule ^(.*)$ http://%{HTTP_Host}/$1 [R=301,L]

    # BEGIN WordPress
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    # END WordPress
</IfModule>

J'ai aussi essayé quelques plugins HTTPS vers HTTP WordPress, qui ne fonctionnaient pas non plus.

S'il vous plaît, guidez-moi sur comment puis-je résoudre ce problème.

4
Amit

oui, j'utilise le service cloudflare flexible SSL (gratuit)

C'est le problème". Comme Antony suggère dans les commentaires. Votre serveur répond aux demandes sur le port 80 (HTTP simple). La connexion SSL est uniquement entre le visiteur et CloudFlare. La connexion entre CloudFlare et votre serveur n'est pas cryptée. C'est ce qu'est le service "Flexible SSL" (Free) CloudFlare.

Référence:
https://support.cloudflare.com/hc/en-us/articles/200170416-What-do-the-SSL-options-mean-

Puisque vous semblez vouloir rediriger toutes les demandes vers HTTP, vous devez désactiver l'option SSL sur CloudFlare.


UPDATE: Étant donné que votre serveur fonctionne sur un HTTP simple et que le protocole SSL est géré par le proxy frontal (CloudFlare dans ce cas), le seul moyen de détecter le protocole de la demande initiale (HTTP ou HTTPS) si le mandataire envoie cette information dans un en-tête de requête HTTP, c.-à-d. X-Forwarded-Proto par convention.

De Wikipedia - Liste des champs d'en-tête HTTP - X-Forwarded-Proto :

une norme de facto pour identifier le protocole d'origine d'une requête HTTP, puisqu'un proxy inverse (ou un équilibreur de charge) peut communiquer avec un serveur Web via HTTP même si la demande adressée au proxy inverse est HTTPS.

Incorporer ceci dans une redirection HTTPS vers HTTP:

RewriteCond %{HTTP:X-Forwarded-Proto} =https [NC]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

Référence:
Support Cloudflare - Comment corriger l'erreur de boucle de redirection infinie après l'activation de SSL flexible avec WordPress? (inclut des informations pertinentes autres que WordPress)

2
MrWhite