2012-10-22 19 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

UserControllerと他のコントローラはhttpでなければなりません。 HTTPSですべてのページが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; 
    } 
    } 

フィルターを使用すると、作成したすべての子コントローラに親コントローラーでarray_mergeを適用する必要があるため、これはサイト全体のhttpsが必要な場合はフィルターよりもクリーンなソリューションです。あなたが1つを欠場した場合、そのコントローラーにはhttpsの力はありません。これの小さな欠点は、フィルタが呼び出された後に呼び出されるということです。つまり、リダイレクトの前に通常よりも多くの処理が行われています。

コントローラーやアクションベースでコントローラーで必要な場合は、フィルターを探してください。