2012-10-22 28 views

Trả lời

7

Hãy xem bài viết này 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; 
    } 
} 

Và thậm chí this để biết thêm chi tiết.

+0

Tôi gặp sự cố sau khi HTTPS tất cả các trang web của tôi đều được HTTPS. Bạn có nghĩ là tốt để tạo HttpFilter? –

+0

Bạn nói rằng bạn cần phải buộc HTTPS .. Giải pháp của tôi. Bạn có cần phải buộc HTTPS chỉ cho một số hành động điều khiển? –

+0

Chỉ dành cho UserController và các bộ điều khiển khác phải là http. Khi Im trong HTTPS tất cả các trang đều https. –

0

Code:

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

Nếu bạn chỉ muốn áp dụng https buộc lên toàn bộ ứng dụng của bạn, đó là những gì tôi cần, bạn có thể đặt điều này trong bảo vệ của bạn/components/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; 
    } 
    } 

Đây là giải pháp sạch hơn bộ lọc nếu bạn cần https trên toàn trang web, vì với bộ lọc, bạn phải áp dụng array_merge với bộ điều khiển chính trong tất cả các trình điều khiển con bạn tạo. Nếu bạn bỏ lỡ một, không có lực lượng https cho bộ điều khiển đó. Hạn chế nhỏ này là nó được gọi là sau khi các bộ lọc đã được gọi, có nghĩa là chế biến nhiều hơn đã được thực hiện hơn chúng ta thường muốn trước khi chuyển hướng.

Nếu bạn cần nó trên bộ điều khiển bằng bộ điều khiển hoặc cơ sở hành động theo hành động, bộ lọc là những gì bạn đang tìm kiếm.

Các vấn đề liên quan