0

J'ai configuré HTTPS dans un site web fait avec Phalcon PHP. Maintenant, je veux rediriger toute demande faite au HTTP à HTTPS. Le serveur est un AWS EC2 avec équilibreur de charge.PhalconPHP + .htaccess: comment forcer https

Phalcon PHP a deux fichiers .htaccess:

/.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ public/ [L] 
    RewriteRule (.*) public/$1 [L] 
</IfModule> 

/.htaccess publique

AddDefaultCharset UTF-8 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L] 
</IfModule> 

J'ai suivi les instructions this post et a ajouté ceci à ces fichiers et j'obtiens ERR_TOO_MANY_REDIRECTS.

# force HTTPS 
RewriteCond %{HTTPS} !=on 
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

Pouvez-vous m'aider à comprendre ce que je fais mal ici?
Merci pour toute aide.

MISE À JOUR: Je suppose que c'est un problème avec l'équilibreur de charge d'AWS. Voici ma configuration: Une instance EC2 avec un équilibreur de charge (utilisant le certificat SSL), puis dans mon Route53 je pointe vers cet équilibreur de charge. J'ai essayé les réponses dans this post et ne fonctionne toujours pas.

Répondre

1

La réponse de Nikolay est juste, mais le problème était quelque chose d'autre: un problème avec AWS Load Balancer. Donc, ceci est mon .htaccess racine actuelle:

<IfModule mod_rewrite.c> 
     RewriteEngine on 

     #solves the problem with load balancer 
     RewriteCond %{HTTP:X-Forwarded-Proto} =http 
     RewriteRule ^$ https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] 

     RewriteCond %{HTTP:X-Forwarded-Proto} =http 
     RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] 

     RewriteRule ^$ public/ [L] 
     RewriteRule (.*) public/$1 [L] 
</IfModule> 

article d'Amazon here.

+1

Intéressant de savoir, merci pour le partage :) –

1

La redirection HTTPS ou toute autre redirection doit être placée avant la règle Phalcon dans votre fichier .htaccess.

Ceci est mon fichier .htaccess dans le racine dossier:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # Force HTTPS 
    RewriteCond %{HTTPS} off 
    RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

    # Force www 
    RewriteCond %{HTTP_HOST} !^$ 
    RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteCond %{HTTPS}s ^on(s)| 
    RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

    # Forward to /public/ folder 
    RewriteRule ^(.*)$ public/$1 [L] 
</IfModule> 
+0

Merci d'avoir répondu. Votre .htaccess devrait fonctionner mais il ne fonctionne pas sur mon serveur pour une raison quelconque. Votre code passe le test sur http://htaccess.mwl.be/ mais sur mon serveur il me fait une erreur 503. J'essaie de résoudre ce problème. Je vais écrire ici quand je trouve le problème, ça doit être un petit détail –