通常我的codeigniter在端口443上运行。
但我有几页我想获得客户端SSL证书,所以我在8443上创建了一个vhost。
使用代码点火器之外的PHP文件,我可以访问并获取客户端的证书信息。
然而,当我访问codeigniter页面时,我收到错误:
ERR_TOO_MANY_REDIRECTS
我的base_url
设置为:
$config['base_url'] = isset($_SERVER['HTTP_HOST']) ? "https://".$_SERVER['HTTP_HOST'] : '';
我也尝试将其设置为空,以便codeigniter自行获取:
$config['base_url'] = '';
但这仍然显示同样的错误。
任何人指针可能出错?
更新
我将HTTP_HOST
更改为SERVER_NAME
,但它将流量重定向到:8443为默认值,而不将端口附加到网址。
所以我添加了以下代码:
$port = $_SERVER['HTTP_PORT'];
if($port == "8443")
$config['base_url'] = isset($_SERVER['SERVER_NAME']) ? "https://".$_SERVER['SERVER_NAME'].":8443" : '';
else
$config['base_url'] = isset($_SERVER['SERVER_NAME']) ? "https://".$_SERVER['SERVER_NAME'] : '';
端口现在仍然附加到URL,但是我收到以下错误:
致命错误:无法重新声明__autoload()(之前已在声明中声明) /bxs/www/application/config/config.php:380)in 第380行/bxs/www/application/config/config.php
更新2
最终设法修复它,不得不改变以下内容:
config.php
$port = $_SERVER['SERVER_PORT'];
if($port == "8443")
$config['base_url'] = isset($_SERVER['SERVER_NAME']) ? "https://".$_SERVER['SERVER_NAME'].":8443" : '';
else
$config['base_url'] = isset($_SERVER['SERVER_NAME']) ? "https://".$_SERVER['SERVER_NAME'] : '';
ssl.php
if(!in_array($class,$exclude)) {
// redirecting to ssl.
$CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']);
if (($_SERVER['SERVER_PORT'] != 443) && ($_SERVER['SERVER_PORT'] != 8443)) redirect($CI->uri->uri_string());
}
因为SSL上没有8443的条目,所以保留了重定向,通过将8443添加到if子句,它就被解决了。