我正在尝试对我的购物车应用程序采用 ssl 路由解决方案,以便某些页面被“强制”为 https:// 页面和 visa-verse。通过研究,我遇到了许多解决方案,这些解决方案涉及在帮助程序、钩子或控制器中使用代码。我已经尝试了其中的一些解决方案,并且在每个解决方案中,切换到 https:// 页面时都会出现重定向错误。
这是我尝试过的最后一个版本(在这里找到:http: //nigel.mcbryde.com.au/2009/03/working-with-ssl-in-codeigniter):
在 application/helper 中创建一个名为 ssl_helper.php 的文件
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());
}
}
}
function remove_ssl()
{
$CI =& get_instance();
$CI->config->config['base_url'] =
str_replace('https://', 'http://',
$CI->config->config['base_url']);
if ($_SERVER['SERVER_PORT'] != 80)
{
redirect($CI->uri->uri_string());
}
}
加载帮助程序,然后在任何需要 ssl 的控制器的构造函数中,只需插入:
force_ssl();
在您不想放置 ssl 的每个控制器中:
if (function_exists('force_ssl')) remove_ssl();
如上所述,在使用它时,我陷入了重定向循环并出现错误(尽管 URL 应具有 https://)。我的问题可能出在我的 .htaccess 文件中吗?这是我的 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /store
RewriteCond $1 !^(index.php\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,L]
</IfModule>
我已经在这工作了一个多星期了!有什么建议么?