【问题标题】:HTTPS & HTTP ExpressionEngine Site URL TagHTTPS 和 HTTP ExpressionEngine 站点 URL 标记
【发布时间】:2012-11-02 15:25:23
【问题描述】:

我今天发现,如果你访问一个在文档头部的 css 链接路径中使用 {site_url} 标签的 EE 站点,如果你输入 https 而不是,该站点将无法加载 CSS 文件http.

我已经通过使用 htaccess 文件强制访问 http 来解决这个问题,但我只是想知道 EE 中是否有一个设置可以更改以使两者都工作?

这只发生在 Chrome 和 IE 上,我猜这取决于您的浏览器设置什么以允许安全。

【问题讨论】:

    标签: expressionengine


    【解决方案1】:

    我在这个问题上得到了很大的帮助previously。我希望它现在也对你有用。

    【讨论】:

    • 嘿 Scott - 注意到您帮助解决了一些 EE 问题。如果您能在此处支持我们的 EE Stack Exchange 提案,那就太好了:area51.stackexchange.com/proposals/46387/…(我们需要拥有超过 200 个代表的人)
    【解决方案2】:

    很少有人知道您可以将相对协议的 URL 用于资产

    例子:

    <link rel="stylesheet" href="//www.site.com/site.css">
    <script type="text/javascript" src="//www.site.com/site.js"></script>
    

    如果浏览器通过 HTTPS 在 SSL 中查看页面,那么它将使用 https 协议请求该资产,否则它将使用 HTTP 请求。

    这可以防止 IE 中出现可怕的“此页面同时包含安全和非安全项目”错误消息,从而将您的所有资产请求保持在同一协议中。

    更多信息来自here

    没有方案的相对 URL (http: 或 https :) 有效,根据 RTF 3986: 第 4.2 节。如果客户对此感到窒息, 那么这是客户的错,因为 他们不符合 URI RFC 中指定的语法。

    您的示例是有效的,应该可以工作。 我使用了相对 URL 方法 我自己在流量很大的网站上 零投诉。还有,我们 在 Firefox、Safari、 IE6、IE7 和 Opera。这些浏览器都 了解该 URL 格式

    【讨论】:

    • 这是一个很好的优雅的解决方案!但请注意:EE 显然不喜欢这样设置 site_url,FWIW。
    • 感谢这个Deviarte,我猜如果你想在你的模板中使用一个全局变量,你只需要创建一个使用 //www.site.com 因为标准的 {site_url}只输出 http?
    【解决方案3】:

    当我加载 CSS 和 JS 时,我从不使用我只是相对设置它的域。例如:

    <link rel="stylesheet" href="/layout/styles/layout.css" >
    

    如果你试试这个,有效果吗?

    【讨论】:

    • Gareth 可能会使用 {stylesheet=} 来获得它的优势,在这种情况下,他提到的行为就会出现。
    • 嗨,肖恩,是的,它工作得很好,这就是我最终做的。上面的Deviarte答案看起来像一个有趣的解决方案?
    【解决方案4】:

    您可以在 system/expressionengine/config/config.php 文件中使用 PHP 来动态设置 {site_url} 配置,包括协议。像这样的:

    // Detect protocol and server host
    $protocol = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https://" : "http://";
    $base_url = $protocol . $_SERVER['HTTP_HOST'];
    
    // Set EE index page
    $config['index_page'] = "";
    
    // Set base and site URL
    $config['base_url'] = $base_url . "/" . $config['index_page'];
    $config['site_url'] = $config['base_url'];
    

    您可以在config.php 的基础上构建您的主题路径、各种图像路径、上传路径等。但是$config['site_url'] 会影响{path=""}{stylesheet} 标签的输出。

    有关更多想法,请参阅NSM's Config Bootstrap file 或文章Configuring ExpressionEngine for multiple servers。可以在config.php中设置的所有路径,见EE2 Config Overrides

    【讨论】:

      【解决方案5】:

      我使用 Nginx。

      我不知道为什么,但是如果我使用绝对 URL(完整路径)而不是相对 URL(/ 在域 as CreateSean said// 开始协议 as Deviarte said) 处的字符串(或者它们是否使用相对 URL 加载较慢?我不知道。)。因此,他们的解决方案/实践(我曾经做过......现在仍在做的事情)都不适合我现在的环境。

      相反,我在 config.php 中做了以下内容:

      $config['base_url'] = $_SERVER["scheme_url"];
      $config['site_url'] = $_SERVER["scheme_url"];
      

      请注意,如果它尚不存在,您可能必须向 PHP 提供 scheme_url。如果像我一样,您正在使用 php-fpm,只需将其添加到您的配置中作为/在您的 nginx 站点配置中需要的位置:

          fastcgi_param scheme_url "$scheme://$host/";
      

      编辑:

      查看 bootstrap/configs,有些使用将协议添加到配置变量的方法(例如 comment by unexplainedBacn above)。在 Nginx 中默认没有 HTTPS 服务器变量,在 ssl 下的 php 虚拟主机配置中添加以下内容:

          fastcgi_param   HTTPS   on; 
      

      【讨论】:

        【解决方案6】:

        全部,

        以下是我如何使用 Apache 和 Config.php 文件重写 URL,以免从浏览器触发“非 SSL 内容警告”。我仍然在我的模板中使用 {path} 和 {stylesheet} 变量,因为它们太好了,不能放弃:)

        在 Apache 的 htaccess 文件中:

        # Set an Apache 'site_url' variable to http when accessed via http:
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ - [E=site_url:http://mysite.com]
        
        
        # Set Apache 'site_url' variable to https when accessed via https
        RewriteCond %{SERVER_PORT} 443
        RewriteRule ^(.*)$ - [E=site_url:https://mysite.com]
        

        然后在system/expressionengine/config.php中

        将以下两行添加到您的代码中(确保您没有在配置文件的其他位置设置这些变量)

        $config['base_url'] = $_SERVER["site_url"];
        $config['site_url'] = $_SERVER["site_url"];
        

        据我了解,site_url 变量是 EE 用于 EE 中的 {stylesheets} 和 {paths} 的。

        谚语“最后一件事”:

        如果您仍然收到非 SSL 警告,只需查看源代码并在源代码中搜索“http://”。这些是罪魁祸首。它们是未使用 base_url/site_url 变量设置的硬编码链接。

        您需要在您的帖子/模板/变量/sn-ps 中找到这些 http 调用,并用简单的 // 替换这些调用。
        所以打电话给

        http://example.com/some_file.html
        

        现在应该是这样的:

        //example.com/some_file.html.  
        

        这适用于绝对和相对 URL。

        对于您设置为 EE 文件上传目录的路径也是如此。确保将这些目录的 url 更改为如下所示

        //example.com/path/to/your/upload/directory
        

        瞧,你应该很高兴:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 2015-06-29
          • 2010-10-20
          • 2016-04-29
          • 2020-03-08
          • 2017-06-13
          • 2019-08-09
          相关资源
          最近更新 更多