2012-10-22 15 views

उत्तर

7

इस लेख http://www.yiiframework.com/forum/index.php/topic/25407-forcing-https-in-yii/

class HttpsFilter extends CFilter { 
    protected function preFilter($filterChain) { 
     if (!Yii::app()->getRequest()->isSecureConnection) { 
      # Redirect to the secure version of the page. 
      $url = 'https://' . 
       Yii::app()->getRequest()->serverName . 
       Yii::app()->getRequest()->requestUri; 
       Yii::app()->request->redirect($url); 
      return false; 
     } 
     return true; 
    } 
} 

और यहां तक ​​कि this अधिक जानकारी के लिए पर एक नजर डालें।

+0

मुझे समस्या है कि HTTPS के बाद मेरी सभी वेबसाइट HTTPS रहती है। क्या आपको लगता है कि HttpFilter बनाने के लिए अच्छा है? –

+0

आपने कहा कि आपको HTTPS को मजबूर करने की आवश्यकता है .. मेरा समाधान करता है। क्या आपको केवल कुछ नियंत्रक कार्रवाई के लिए HTTPS को मजबूर करने की आवश्यकता है? –

+0

केवल उपयोगकर्ता नियंत्रक और अन्य नियंत्रकों के लिए http होना चाहिए। जब एचटीटीपीएस में आईएम सभी पेज https रहता है। –

0

कोड:

private static $secureRoutes = array('site/login'=>'',); 

public function filterAccessControl($filterChain) { 

    if(!Yii::app()->getRequest()->isSecureConnection && array_key_exists($filterChain->controller->route, self::$secureRoutes)){ 
      $this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), 'https')); 
     return false; 
    } 
    else if(Yii::app()->getRequest()->isSecureConnection && !array_key_exists($filterChain->controller->route, self::$secureRoutes)){ 
      $this->redirect($this->createAbsoluteUrl($filterChain->controller->route, array(), 'http')); 
     return false; 
    } 
} 
1

आप बस https अपने पूरे आवेदन है, जो मैं क्या जरूरत है, तो आप अपने संरक्षित/घटकों में इस डाल सकते हैं/Controller.php पर मजबूर लागू करना चाहते हैं:

public function beforeAction($action) { 
    if(! Yii::app()->getRequest()->isSecureConnection) { 
     $url = 'https://' . 
     Yii::app()->getRequest()->serverName . 
     Yii::app()->getRequest()->requestUri; 
     Yii::app()->request->redirect($url); 
     return false; 
    } 
    } 

यदि आपको साइट-व्यापी https की आवश्यकता है, तो फ़िल्टर से यह एक क्लीनर समाधान है, क्योंकि फ़िल्टर के साथ आपको अपने द्वारा बनाए गए सभी बच्चों के नियंत्रकों में मूल नियंत्रक के साथ array_merge लागू करना होगा। यदि आप एक याद करते हैं, तो उस नियंत्रक के लिए कोई https बल नहीं है। इसके लिए मामूली कमी यह है कि फिल्टर के बाद इसे बुलाया जाता है, जिसका अर्थ है कि हम आमतौर पर पुनर्निर्देशन से पहले चाहते हैं कि अधिक प्रसंस्करण किया गया है।

यदि आपको नियंत्रक द्वारा नियंत्रक या क्रिया के आधार पर एक क्रिया पर इसकी आवश्यकता है, तो फ़िल्टर आपके लिए खोज रहे हैं।