背景:网站(example.com),dns通过cloudflare pro计划设置,这提供了"灵活的ssl"(在这里阅读),这意味着ssl只存在于客户端和cloudflare之间,而不是cloudflare和服务器之间,因此不需要专用的ip和不需要在服务器上进行特殊设置.服务器设置为不使用ssl(只是一个通用网站),但是cloudflare灵活的ssl正在处理ssl方面.
语言:PHP(codeignighter,但这并不重要)
目标:浏览域"exmple.com/ "或"http:// exmple.com/ "时,生成变量"http:// example.com",并在浏览"https:// example.com"时/*"生成变量"https:// example.com".
什么应该工作(但不是):
$root = ''; if( isset($_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] != 'off' ) { //it doesnt reach here... $root .= 'https://'; } else { $root .= 'http://'; } $root .= "".$_SERVER['HTTP_HOST']; $root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
我总是可以做到:"// example.com",但这对我来说并没有真正解决问题.思考?我应该做一些字符串比较来确定https-ness吗?
我确定原因是当请求到达服务器(https或http)时,它来自端口80并且它不会被识别为ssl,因此未定义$ _SERVER ['HTTPS'].我可以在服务器和cloudflare之间设置一个自定义的ssl,但如果我可以使用一些正则表达式并以某种方式比较网址,那么会更好(更省力).
我还想知道可能存在的问题和漏洞.
谢谢 :)