Takeshi Amano
p****@takes*****
2008年 10月 7日 (火) 14:42:43 JST
天野です 以前kunitsujiさんの拡張ライブラリを使ってCI内でのSSLを実装してみましたが、 それ以外にも実装方法があるのをCIフォーラムのスレッドでみつけたのでここで まとめておきます。 元のスレッド: http://codeigniter.com/forums/viewthread/83154/ フォーラム内には以下の2つの方法がありました。 1. .htaccessなどapacheの設定をいじる方法 2. ヘルパ関数を使う方法 で詳細は以下の様な感じ 1. .htaccessなどapacheの設定をいじる方法 この方法ではmod_rewriteのRewriteCondを使って特定のコントーラー以下のアクセスは強制的にhttps経由に しています。 スレッドにあった例、checkoutとadminコントローラ以下のアクセスをhttpsにしています。 RewriteEngine on RewriteBase / # Redirect all domain name variations to main site RewriteCond %{HTTP_HOST} ^site.com [NC] RewriteRule ^(.*)$ http://www.site.com/$1 [L,R=301] # Force checkout to be secure RewriteCond %{SERVER_PORT} 80 RewriteCond $1 !^(index\.php|images|javascripts|site|admin|stylesheets|robots\.txt) RewriteRule /checkout(.*)$ https://www.site/checkout$1 [L] # Force admin to be secure RewriteCond %{SERVER_PORT} 80 RewriteCond $1 !^(index\.php|images|javascripts|site|checkout|stylesheets|robots\.txt) RewriteRule /admin(.*)$ https://www.site.com/admin$1 [L] # Flip back to http unless in checkout or admin RewriteCond %{SERVER_PORT} !80 RewriteCond $1 !^(index\.php|images|javascripts|checkout|admin|stylesheets|robots\.txt) RewriteRule ^(.*)$ http://www.site.com/$1 [L] # Get CodeIgniter going RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 2. ヘルパ関数を使う方法 このヘルパ関数をヘルパとして使える様にしておいたあと、httpsにしたいコントローラ内の コンストラクタや関数内でこれを呼んでbase_urlの内容を置き換えた後redirectしていますね。 スレッドにあった例) if ( ! function_exists('force_ssl')) { function force_ssl() { $CI =& get_instance(); $CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']); if ($_SERVER['SERVER_PORT'] != 443) { redirect($CI->uri->uri_string()); } } } 2. の方がコードをいじるだけなので、変更は楽なのでこっちの方を使ってみようかなと思っています。 パフォーマンスとかはどちらがいいんでしょうか?? Takeshi Amano As for that VP talk all the time, I'll tell you, I still can't answer that question until somebody answers for me what is it exactly that the VP does every day? - Sarah Palin