我有一个网站,假设http://永远是唯一的协议。现在我买了一张SSL证书但是当我访问网站时用https://我在浏览器中获取部分网站不安全的信息。正如我发现我有一些JS,CSS以及我在网站的HTML中使用http://引用的图像和文件。
那么启用完整https的最佳做法是什么?当我引用图像,CSS或JS时,我是否应该在每个地方更改我的网站,检查网站是否加载了http或https并使用相应的协议加载资源?这对我来说似乎很多工作并且容易出错。还有其他方法,更容易使整个网站完全安全吗?
答案 0 :(得分:3)
而不是使用http://yoursite.com/css/file.css链接到你的css,js和图像,只需使用相对路径,例如/images/image.jpg和/css/file.css,这样就可以使用http和https,此外,如果您更改域名或将您的内容复制到另一个域,您也不必更改所有这些链接。
答案 1 :(得分:1)
使用相对路径。如果您指向与您的网站位于同一网站上的内容,则不应使用http://
如果由于某种原因你仍然需要http://然后只需将它们全部切换到https://。 http://永远不会抱怨,因为它指向https:// stuff,但如果https://页面指向非https内容,则会抱怨。
如果您指向控制之外的内容,例如在另一个网站上,那么您需要希望通过https获取该内容。如果你做不到,那么你就会受到冲击,你需要忍受错误,从其他地方获取内容,或通过你自己的https连接代理内容。
答案 2 :(得分:1)
为了补充@ drew010的答案,您可以使用其他域并仍使用//
引用当前协议,例如:
<img src="/pics/home.png" />
<img src="//my-cdn.com/pics/info.png" />
后一个示例将指向来自https://..
的{{1}}和来自https://your-site.com
的{{1}}。
答案 3 :(得分:0)
最佳做法是使用相对路径而不是绝对路径,但有时绝对是更好的选择,因此您可以执行以下操作:
我可以想象你有一个名为config.php或common.php的文件(一个存储你常用的vars的文件,你把它包含在每一页中),所以把这段代码放在那里:
function selfURL() {
$s = empty($_SERVER["HTTPS"]) ? ''
: ($_SERVER["HTTPS"] == "on") ? "s" : "";
$protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
}
function strleft($s1, $s2) {
return substr($s1, 0, strpos($s1, $s2));
}
然后你可以指定一个名为$http
的var来获取函数的值,如:
然后,当你想要包括像图像,CSS等任何东西时,请执行以下操作:
$http = selfURL();
$http = selfURL();
这种方法可靠,因为它适用于任何情况。