我正在尝试将ssl路由解决方案应用到我的购物车应用程序中,以便某些页面被“强制”为https://页面和签证。通过研究,我遇到了许多解决方案,涉及在帮助程序,钩子或控制器中使用代码。我已经尝试了一些这样的解决方案,并在每个解决方案中切换到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 put的每个控制器中:
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>
我已经待了一个多星期了!有什么建议吗?
答案 0 :(得分:2)
如果你使用force_ssl函数,这里是重定向循环的解决方案。
function check_ssl()
{
$CI =& get_instance();
$class = $CI->router->fetch_class();
$ssl = array('Register', 'SignIn', 'Recover');
if(in_array($class, $ssl))
{
force_ssl();
}
else
{
unforce_ssl();
}
}
function force_ssl()
{
$CI =& get_instance();
$CI->config->set_item('base_url', str_replace('http://', 'https://', config_item('base_url')));
if ($_SERVER['SERVER_PORT'] != 443) // it will loop if you change it to !==
{
redirect($CI->uri->uri_string());
}
}
function unforce_ssl()
{
$CI =& get_instance();
$CI->config->set_item('base_url', str_replace('https://', 'http://', config_item('base_url')));
if ($_SERVER['SERVER_PORT'] != 80) // it will loop if you change it to !==
{
redirect($CI->uri->uri_string());
}
}
答案 1 :(得分:1)
我回答了类似的问题here: https://stackoverflow.com/questions/1500527/how-to-use-ssl-with-codeigniter/1500558#1500558
但是,简而言之:
<IfModule mod_rewrite.c>
RewriteEngine On
RedirectPermanent /sslfolder https://www.yoursite.com/sslfolder
</IfModule>
答案 2 :(得分:0)
嗨大家通过在配置中设置base_url来回答这里,它会自动在http和https之间切换