2009-11-30 4 views
3

c'est encore une autre question .htaccess. Et j'ai déjà fait ma revue de littérature. Apprécierait toute aide.htaccess (https à http)

Exigences:

  1. HTTPS force seulement pour quelques URL.
  2. Le navigateur ne doit pas indiquer page partiellement chiffrée pour les pages SSL.

J'utilise CodeIgnitor et peaufiné le base_url dans config.php à:

$config['base_url'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 'https://' : 'http://' ; 
$config['base_url'] .= $_SERVER['HTTP_HOST']; 
$config['base_url'] .= preg_replace('@/[email protected]','',dirname($_SERVER['SCRIPT_NAME'])).'/'; 

Ainsi, si une URL est accessible avec https: // tous les liens contenus dans ce serait également sur HTTPS c'est d'éviter les "pages partiellement chiffrées".

J'ai commencé avec le code htaccess suivant:

RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 

Avec cette toute URL ayant abc, xyz ou pqr seront redirigés vers HTTPS et toute URL ne pas l'avoir sera de retour forcé à HTTP.

Cela a bien fonctionné, le seul problème avec ceci est qu'il n'est pas capable d'éviter le problème de "page partiellement chiffrée". Par exemple si je vais pour l'URL http://www.example.com/abc/index.php, il sera redirigé vers https://www.example.com/abc/index.php. Mais les liens sur cette page disent https://www.example.com/images/logo.png, sera changé en HTTP à cause de la dernière règle de réécriture. Ainsi, la page est partiellement cryptée.

J'ai également essayé d'ajouter http_referer vérifier comme ceci pour résoudre ce problème, mais évidemment cela ne résoudra pas le problème. Car les clics provenant d'une page HTTPS ne seraient jamais convertis en HTTP.

RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_REFERER} !^(https)(.*)$ 
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 

Je veux juste savoir s'il y a une meilleure approche disponible pour ce problème simple ou si je le fais dans le mauvais sens. Est-ce que l'utilisation de crochets CI au lieu de .htaccess résoudra cela?

Merci à l'avance

+0

im juste demander .. Pourquoi diable ne laissez-vous pas les informations des utilisateurs restent privés? – TheCrazyProfessor

Répondre

0

D'accord. Je pense que j'ai trouvé la solution. Je l'ai testé aussi sur mon serveur. fonctionne bien .. avait besoin d'un état HTTP Referer aussi dans la réécriture

RewriteCond %{HTTPS} !on 
RewriteRule ^(.*)/(abc|xyz|pqr)(.*)$ https://%{HTTP_HOST}/cart/$2$3 [R=301,NC,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_REFERER} !^https(.*)/(abc|xyz|pqr)(.*)$ [NC] 
RewriteCond %{REQUEST_URI} !^(.*)/(abc|xyz|pqr)(.*)$ [NC] 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 

Maintenant, si vous visitez l'une des pages avec (abc, xyz, pqr), il sera redirigé vers https: // ... également tous les noyés lien sera servi à partir de https. donc le navigateur ne montrera pas l'avertissement de cryptage partiel (panneau d'avertissement rouge dans la barre d'état)

lorsque vous vous éloignez de l'une de ces pages, cette page sera sur SSL à cause de la vérification de référenceur, et cette page pourrait montrer partiellement avertissement crypté (mais je peux vivre avec). Une fois que vous vous éloignez de cette page, tout sera non-SSL.

Espérons que cela aide quelqu'un !!!

0

Vous pouvez placer votre contenu statique sur un domaine différent, comme static.example.com et désactiver le HTTPS à la redirection HTTP pour ces demandes.

Utilisez //static.example.com/… pour référence que les ressources à utiliser le même schéma d'URI que le document de référence est contenue et test dans votre RewriteRule si une telle ressource est demandée:

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} !=static.example.com 
RewriteRule !(^|/)(abc|xyz|pqr) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L] 
+0

dans ce cas, si une page de example.com a des contenus de static.example.com, le navigateur affiche la page partiellement chiffrée – shikhar

+0

@shikhar: J'ai clarifié ma déclaration. – Gumbo