YiiコントローラのアクションでHTTPS(SSL)を強制する方法を知りたい。YiiコントローラHTTPSを強制する
7
A
答えて
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
コード:
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の力はありません。これの小さな欠点は、フィルタが呼び出された後に呼び出されるということです。つまり、リダイレクトの前に通常よりも多くの処理が行われています。
コントローラーやアクションベースでコントローラーで必要な場合は、フィルターを探してください。
私は、HTTPS後に私のすべてのウェブサイトがHTTPSを維持するという問題があります。 HttpFilterを作成すると良いと思いますか? –
あなたはHTTPSを強制する必要があると言った..私の解決策はそうです。特定のコントローラアクションに対してのみHTTPSを強制する必要がありますか? –
UserControllerと他のコントローラはhttpでなければなりません。 HTTPSですべてのページがhttpsのままであるとき。 –