【问题标题】:How to make a website in PHP work both in HTTP and HTTPS?如何使 PHP 中的网站同时在 HTTP 和 HTTPS 下工作?
【发布时间】:2011-09-17 20:18:09
【问题描述】:

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

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

【问题讨论】:

    标签: php security ssl https


    【解决方案1】:

    而不是使用http://yoursite.com/css/file.css 链接到您的 css、js 和图像,只需使用 /images/image.jpg 和 /css/file.css 等相对路径,这样它就可以同时使用 http 和 https,如果您更改域或将您的内容复制到另一个域,您也不应该更改所有这些链接。

    【讨论】:

      【解决方案2】:

      使用相对路径。如果您指向的内容与您的站点位于同一站点上,那么您不应该使用 http://

      如果由于某种原因您仍然需要 http://,那么只需将它们全部切换到 https://。 http:// 永远不会抱怨,因为它指向 https:// 的东西,但 https:// 页面如果指向非 https 的东西就会抱怨。

      如果您指向您无法控制的内容,例如在另一个网站上,那么您需要希望您可以通过 https 获取该内容。如果你不能,那么你就被淹没了,你要么需要忍受错误,要么从其他地方获取内容,或者通过你自己的 https 连接代理内容。

      【讨论】:

        【解决方案3】:

        为了补充@drew010 的答案,您可以使用其他域,但仍使用// 引用当前协议,例如:

        <img src="/pics/home.png" />
        <img src="//my-cdn.com/pics/info.png" />
        

        后一个示例将从https://your-site.com 指向https://..,从http://your-site.com 指向http://...

        【讨论】:

          【解决方案4】:

          最佳做法是使用相对路径而不是绝对路径,但有时绝对是更好的选择,因此您可以执行以下操作:

          我可以想象你有一个名为 config.php 或 common.php 的文件(一个存储常用变量的文件,并且你将它包含在每个页面中),所以把这段代码放在那里:

          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 的变量来获取函数的值,例如: $http = selfURL(); 然后每当您想包含图像、css 等内容时,请执行以下操作:
          &lt;img src="&lt;?=$http?&gt;images/sample.png" /&gt;

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

          【讨论】:

          • “有时绝对是更好的选择”是什么时候?
          • 您建议在您的回答中使用:&lt;img src="/pics/home.png" /&gt;,如果他这样做,然后决定将网站移动到一个文件夹,图像将全部中断,因此使用绝对路径将确保这永远不会发生。
          • 相对路径变了,为什么绝对路径不应该变?
          • 因为以我的方式,您可以通过更改单个变量来轻松更改它,而不是一个一个地手动进行
          • 是的,但是,是的,这个对话被转移了 :) 我仍然看不出使用绝对路径比使用相对路径更好的理由。
          猜你喜欢
          • 2018-11-12
          • 1970-01-01
          • 2018-04-17
          • 2018-11-16
          • 2020-11-21
          • 2019-03-06
          • 2011-01-28
          • 1970-01-01
          • 2016-09-17
          相关资源
          最近更新 更多