如何使PHP中的网站在HTTP和HTTPS中都能正常工作?

时间:2011-09-17 20:18:09

标签: php security ssl https

我有一个网站,假设http://永远是唯一的协议。现在我买了一张SSL证书但是当我访问网站时用https://我在浏览器中获取部分网站不安全的信息。正如我发现我有一些JS,CSS以及我在网站的HTML中使用http://引用的图像和文件。

那么启用完整https的最佳做法是什么?当我引用图像,CSS或JS时,我是否应该在每个地方更改我的网站,检查网站是否加载了http或https并使用相应的协议加载资源?这对我来说似乎很多工作并且容易出错。还有其他方法,更容易使整个网站完全安全吗?

4 个答案:

答案 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来获取函数的值,如: $http = selfURL(); 然后,当你想要包括像图像,CSS等任何东西时,请执行以下操作: $http = selfURL();

这种方法可靠,因为它适用于任何情况。