2014-04-11 12 views
5

Utilizzo Zend-Framework e sotto sono il codice del mio htaccess.Forza non SSL (http) su una pagina particolare e SSL su tutte le altre pagine da .htaccess

rewriteEngine On 

RewriteCond %{HTTPS} =off 
RewriteRule ^(.*)$ https://www.mysite.co/$1 [R=301,L] 
RewriteCond %{http_host} ^mysite.co [NC] 
RewriteRule ^(.*)$ https://www.mysite.co/$1 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

Ora voglio forzare http su mysite.co/news/* e HTTPS su tutte le altre pagine. Quindi, come posso applicare la regola?

+1

Giusto per sottolineare che, per il momento il cliente è in grado di ottenere questo reindirizzamento da 'https: //' a 'http: //', ha già effettuato una richiesta HTTPS, quindi l'handshake (la parte "costosa" di SSL/TLS) è già successo. Non sono sicuro che otterrai l'ottimizzazione che stai cercando di ottenere dopo questo, se è quello che stai cercando di fare. – Bruno

risposta

1

È possibile definire il controller e l'azione e inserire questo codice in tale condizione, per cui è possibile utilizzare il bootstrap di zend framework.

come:

if($_SERVER['SERVER_PORT'] == '443') { 
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
    exit(); 
} 

Oppure è possibile utilizzare questo metodo bootstrap

protected function _initForceSSL() { 
    if($_SERVER['SERVER_PORT'] == '443') { 
     header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); 
     exit(); 
    } 
} 
1

Esiste la funzione isSecure() che permette di sapere se si tratta di un https richiesta (vero) o http (false).
Si può cercare di passare attraverso un plugin come questo per reindirizzare la query:

class Application_Plugin_SSL extends Zend_Controller_Plugin_Abstract 
{ 

    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request){ 

     if (!$request->isSecure()){ // -> not https 

      $request->setModuleName('yourmodule') 
        ->setControllerName('yourcontrolle') 
        ->setActionName('youraction') 
        ->setDispatched(true) ; 
     } 
    } 
}