web-dev-qa-db-fra.com

Comment changer le dossier entier de http à https

Le checkout/onepage fonctionne avec HTTPS. Mais pourquoi checkout/cart ne l’est pas?

Voici un fragment du .htaccess:

############################################
## enable rewrites

Options +FollowSymLinks
RewriteEngine on
# RewriteCond %{REQUEST_URI} checkout\/onepage
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} checkout/
# RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
RewriteRule ^checkout/$ https://idfr.com/checkout/ [R=301,L]

############################################
  • Version Apache: Apache/2.4.7 (Ubuntu)
  • système d'exploitation: Windows 8.1
  • indications dans les fichiers de log; ErrorLog principal: "/var/log/Apache2/error.log"
2
Sonia

Placez dans votre dossier /checkout/ un htaccess avec ce contenu:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
</IfModule>

Toutes les demandes qui ne sont pas sécurisées (ne venant pas sur le port 443) seront réécrites en https- ed url.

autre moyen

Placez au début de vos fichiers onepage et cart suivants PHP extrait de code:

<?php
if ($_SERVER["SERVER_PORT"] != 443) {
$redir = "Location: https://" . $_SERVER['HTTP_Host'] . $_SERVER['PHP_SELF'];
header($redir);
header("HTTP/1.1 301 Moved Permanently");
exit();
}
?>

qui fait la même chose.

1
Evgeniy

Je pense que cette ligne pourrait être le problème:

RewriteRule ^checkout/$ https://idfr.com/checkout/ [R=301,L]
        ----^     ----^

Cette ligne rewites the url si l'URL 'commence par' (^) et 'se termine par' ($) par la chaîne 'checkout'. Comme vous n'avez aucun caractère générique tel que * ou ., cette ligne signifie désormais "littéralement checkout/, rien d'autre".

Cela signifie que checkout/ correspondra, mais checkout/example ne le sera pas , car il ne correspond pas aux conditions de la règle de réécriture.

# force ssl
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_URI} ^/checkout
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

Cet extrait fait:

  • Si nous sommes HTTP (qui utilise le port 80)
  • ET l’url commence par /checkout ( La barre oblique peut ne pas être nécessaire en fonction de votre serveur)
  • -> Rediriger vers la version https
1
Martijn