web-dev-qa-db-fra.com

RewriteCond% {HTTPS}! = On ne fonctionne pas même si RewriteCond% {SERVER_PORT}! ^ 443 $ fonctionne

J'ai l'obligation de vérifier les URL non HTTPS dans htaccess.

D'après ce que je comprends, RewriteCond %{HTTPS} !=on correspondra à toutes les URL qui ne sont pas HTTPS. Mais lors des tests, je trouve RewriteCond %{HTTPS} !=oncorrespond à la fois HTTP et HTTPS URL.

Cependant, RewriteCond %{SERVER_PORT} !^443$ fait correspondre correctement les URL non HTTPS? Me manque-t-il quelque chose concernant la compréhension de % {HTTPS}! = =?

1
Kannan

D'après ce que je comprends, RewriteCond %{HTTPS} !=on correspondra à toutes les URL qui ne sont pas HTTPS.

Oui c'est correct. Dans ce contexte, HTTPS est une variable de serveur , définie par Apache en fonction de la requête frappant votre serveur.

Mais lors des tests, je trouve RewriteCond %{HTTPS} !=oncorrespond à la fois HTTP et HTTPS URL.

Ce n'est pas possible si le certificat SSL est installé directement sur votre serveur d'applications. Toutefois, si vous utilisez un proxy SSL, celui-ci étant géré par un proxy frontal et la connexion du proxy SSL à votre serveur d'applications étant un ancien HTTP (tel est le cas de l'option Flexible SSL gratuite de Cloudflare), ceci apparaîtra comme étant le cas, car votre serveur ne sert que du trafic sur HTTP.

Cependant, RewriteCond %{SERVER_PORT} !^443$ fait correspondre correctement les URL non HTTPS?

Cependant, cela contredit ce qui précède! Si cela fonctionne, la vérification par rapport à HTTPS devrait également l'être. Cela semblerait suggérer que vous voyez peut-être une réponse en cache ci-dessus?

1
MrWhite