2014-04-11 12 views
5

Używam Zend-Framework i poniżej jest kod mojego htaccess.Wymuszaj brak SSL (http) na określonej stronie i SSL na wszystkich innych stronach przez .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] 

Teraz chcę wymusić http na mysite.co/news/* i https na wszystkich innych stronach. Jak więc zastosować regułę?

+1

Wystarczy podkreślić, że w momencie klient jest w stanie uzyskać ten przekierowanie z 'https: // do' 'http: //', to już wysłało żądanie HTTPS, więc handshake ("droga" część SSL/TLS) już się wydarzyła. Nie jesteś pewien, czy uzyskasz optymalizację, którą chcesz osiągnąć po tym, jeśli to właśnie chcesz zrobić. – Bruno

Odpowiedz

1

Możesz zdefiniować swój kontroler i akcję i umieścić ten kod w tym warunku, ponieważ możesz użyć bootstrap z Zend Framework.

jak:

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

Albo można użyć tej metody bootstrap

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

istnieje funkcję isSecure() który pozwala wiedzieć, czy jest to https żądanie (prawda) lub http (false).
Można spróbować przejść przez ten plugin jak przekierować zapytanie:

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) ; 
     } 
    } 
}