2 votes

Forcer http/https : Comment détecter https et quel en-tête de statut envoyer lors d'une redirection ?

J'ai écrit un script pour forcer certaines sections du site à être accessibles via http ou https. Nous voulons que l'utilisateur soit redirigé vers la page http normale au cas où il atterrirait sur la version https par accident, et vice versa. Jusqu'ici, tout va bien, mais j'ai deux questions à vous poser.

  1. Quel est l'en-tête d'état correct à envoyer lors du changement de protocole ? Je l'utilise actuellement dans les deux cas avant la redirection :

    header('HTTP/1.1 301 Moved Permanently');
  2. Quel est le meilleur moyen de détecter si nous utilisons https ?

    // if ($_SERVER['SERVER_PORT'] == 443) /* EDIT: OK, not this? */
    
    if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) === 'on'))

    Quelque chose d'autre ? Les deux ?

Réponses aux commentaires :

  • Nous utilisons Apache, mais s'il existe une solution universelle, ce serait formidable.

  • Nous ne voulons pas utiliser .htaccess parce que les pages https requises sont "signalées" comme telles par le CMS que nous utilisons et dont il fait partie. Nous ne voulons pas "coder en dur" les URL dans un fichier.

3voto

Marcus Adams Points 27070
  1. El 301 la redirection est la bonne méthode. Vous ne pouvez pas passer de HTTP à HTTPS à mi-parcours. La page doit être rechargée dans le client.
  2. La deuxième méthode, via $_SERVER['HTTPS'] est la méthode préférée. Assurez-vous simplement que votre serveur web la prend en charge.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X