用户
 找回密码
 入住 CI 中国社区
搜索
查看: 6894|回复: 12
收起左侧

[安全] ci 能同时绑定http和https吗,跨域问题要怎么解决?

[复制链接]
发表于 2018-6-13 10:02:51 | 显示全部楼层 |阅读模式
$config['base_url'] ='//codeigniter.org.cn' ;  能否这样配置。

跨域问题困扰了我们很久。因为只能绑定1个域名,所以无法做专门的手机站点。

比如www.codeigniter.org.cn和m.codeigniter.org.cn,无法同时绑定一个程序,然后做PC和手机判断。

所以我们就用同一套程序,分2个站点分别绑定。但是存在跨域问题,比如手机端编辑器提交的内容,如果PC端进行审核,内容会变成一个括号。

后面我们只能删除手机端编辑器,所有内容都只能通过PC端提交。

现在又遇到一个问题,就是https部署,因为只能绑定1个域名,那么如果部署https,那么http的访问又变成跨域了。
 楼主| 发表于 2018-6-13 13:35:50 | 显示全部楼层
本帖最后由 卖烧烤123 于 2018-6-13 14:06 编辑
Hex 发表于 2018-6-13 12:36
嗯,静态资源可以这样配,没问题。

是不是路由也要做配置,这种{url topic/getone/$question['id']}  url还是http的
function url($var, $url = '') {
        global $setting;
        // exit($var);
        $removeIndex=config_item('removeIndex');
        $location = $removeIndex . $var . $setting ['seo_suffix'];
        if ((false === strpos ( $var, 'admin_' )) && $setting ['seo_on']) {
                $useragent = $_SERVER ['HTTP_USER_AGENT'];

                if (! strstr ( $useragent, 'MicroMessenger' )) {
                        $location = $var . $setting ['seo_suffix'];
                }else{
                        $location = 'index.php?' . $var . $setting ['seo_suffix'];
                }

        }

        $location = urlmap ( $location, 2 );
        return base_url () . $location; //程序动态获取的,给question的model使用


}


为什么url还是http
发表于 2018-6-13 12:22:49 | 显示全部楼层
卖烧烤123 发表于 2018-6-13 12:17
比如,我在base_url配置了https://codeigniter.org.cn/
那么我使用http://codeigniter.org.cn访问网站,会 ...

这样写:

PHP复制代码
 
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
 
$config['base_url'] = $protocol . 'domian.com/';
 
复制代码

config.php 也是 php 脚本,所以这里可以写 PHP 代码来实现特殊逻辑。

另外,CORS 并不是你写的那个只是一个 http header,有一些具体规范,可以参考这里 https://developer.mozilla.org/zh ... Access_control_CORS
 楼主| 发表于 2018-6-13 16:03:08 | 显示全部楼层
本帖最后由 卖烧烤123 于 2018-6-13 16:15 编辑
Hex 发表于 2018-6-13 15:58
你在 HTTP 域名下就会生成 http 的呀,在 https 域名下就生成 https

我知道原因了,因为缓存的缘故。
比如我第一次访问先用http访问的,那么生成的缓存文件里面的url就是http。第二次用https访问,那么调用的缓存文件没更新,就会显示http


为什么不能直接使用$config['base_url' = '//domian.com/';  


我测试之后,发现觉得//domian.com/可以正常使用,没有发现异常?是不是还有我没有遇到的情况
发表于 2018-6-13 12:09:43 | 显示全部楼层
首先要确定你到底是 base_url 的问题,还是跨域的问题,base_url 可以通过修改这个 base_url 配置解决。
跨域问题,这是前端遇到的问题,PHP 需要用 CORS 解决前端跨域问题。所以需要明确,你到底是什么问题?
 楼主| 发表于 2018-6-13 12:17:08 | 显示全部楼层
本帖最后由 卖烧烤123 于 2018-6-13 12:18 编辑
Hex 发表于 2018-6-13 12:09
首先要确定你到底是 base_url 的问题,还是跨域的问题,base_url 可以通过修改这个 base_url 配置解决。
跨 ...

比如,我在base_url配置了https://codeigniter.org.cn/
那么我使用http://codeigniter.org.cn访问网站,会出现跨域问题吧
然后我在index.php配置了header('Access-Control-Allow-Origin: http://codeigniter.org.cn');,是否能解决跨域问题。

base_url能否直接配置//codeigniter.org.cn/
 楼主| 发表于 2018-6-13 12:28:11 | 显示全部楼层

我试试看!

另外我在服务器配置了
    location ~* \.(eot|ttf|woff|woff2|svg|otf|css|js)$ {
        add_header Access-Control-Allow-Origin *;
    }

发表于 2018-6-13 12:36:11 | 显示全部楼层
卖烧烤123 发表于 2018-6-13 12:28
我试试看!

另外我在服务器配置了

嗯,静态资源可以这样配,没问题。
发表于 2018-6-13 12:38:15 | 显示全部楼层
到底有几个站点?
www.xxx.com 和 m.xxx.com?
发表于 2018-6-13 15:58:40 | 显示全部楼层
卖烧烤123 发表于 2018-6-13 13:35
是不是路由也要做配置,这种{url topic/getone/$question['id']}  url还是http的
function url($var, $url ...

你在 HTTP 域名下就会生成 http 的呀,在 https 域名下就生成 https

本版积分规则