Avec les réécritures ci-dessous dans htaccess, comme prévu cette requête HTTPS est pas réécrit :
https://example.com/system/anything
n'est pas réécrit pour
http://example.com/system/anything
Mais, de manière inattendue, cette requête HTTPS est réécrite :
https://example.com/preview/anything
est réécrit pour
http://example.com/index.php/preview/anything
Pourquoi ?
Quelques autres faits / observations :
/system/
est un chemin d'accès réel sur le serveur. Mais /preview/
n'est pas un chemin réel - c'est un segment d'URL qui a un sens dans le CMS, par exemple, /index.php/preview/anything
est la façon dont le CMS reçoit la demande pour le /preview/anything
URL.
D'autres URL non liées au système se réécrivent correctement (de HTTPS à HTTP), et sont correctement transmises à index.php. Par exemple,
https://example.com/real
est réécrit pour
http://example.com/real
Voici le bloc complet de règles :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Force HTTPS for System URLs
RewriteCond %{REQUEST_URI} ^/system(.*)$ [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ "https://example.com/$1" [R=301,L]
# Force HTTP for Other URLs, but not: system or preview
RewriteCond %{REQUEST_URI} !^/(system|preview)/(.*)$ [NC]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ "http://example.com/$1" [R=302,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
Un aperçu de la raison pour laquelle /preview/
reçoit le traitement bizarre ?
Ajouté : Notez que /preview/anything
obtient un 302
rediriger vers /index.php/preview/anything
-- et c'est en grande partie ce qui semble si bizarre / inattendu. Il ne devrait pas y avoir de redirection dans la règle finale, mais seulement une réécriture.