【问题标题】:ExpressionEngine access via both http and https通过 http 和 https 访问 ExpressionEngine
【发布时间】:2012-08-30 15:49:21
【问题描述】:

我们有一个 ExpressionEngine 网站,我们通过 http 和 https 访问。我们的用户在通过 https 访问时会收到来自 IE 的安全警告,因为某些资产的访问不安全(在这种情况下,此处引用了 CSS 和图像)。

当设置“常规配置 -> 站点根目录的 URL”包含 http:// 协议标识符(该字段为空时,仅设置为站点域 [example.com],或设置为如果没有协议 [//example.com/],我们会遇到其他问题,所以这些不是真正的选择)。当然,有问题的 URL 是在模板中使用 {path=} 或 {stylesheet=} 生成的那些。

有没有一种通过与页面相同的协议交付所有资产的好方法?

谢谢, 斯科特

【问题讨论】:

    标签: expressionengine


    【解决方案1】:

    这是因为EE变量默认不检测或利用https,所以你必须在代码中设置它们。最简单的方法是使用插件:

    http://devot-ee.com/add-ons/https-support

    http://devot-ee.com/add-ons/dm-force-ssl

    http://devot-ee.com/add-ons/force-ssl(商业)

    (没有特别的顺序)我没有使用过这些,所以不能推荐一个特定的,因为我使用的是我自己的插件。

    【讨论】:

    • 好的,太棒了——HTTPS 支持正是我想要的。这是一个不错的简单扩展,如果通过 https 访问,它会在您的会话中重置 EE 的“base_url”(以及其他)。
    【解决方案2】:

    您需要包含根 URL 吗?很多时候,我会将站点的根 URL 设置为“/”。

    另一种选择是手动包含这些资产(不使用路径或样式助手)。

    如果 URL 是真实的,它将自动继承当前协议。

    【讨论】:

    • 当我使用“/”时,在控制面板中保存条目会中断——具体来说,页面模块会抱怨 URL 错误。是的,我可以手动编码 URL,但这里的重点是保持 {path=} 和朋友的优势。
    【解决方案3】:

    您可以使用 PHP 检测协议并在您的 system/expressionengine/config/config.php 文件中动态设置它。我使用这样的东西:

    $protocol = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? "https://" : "http://";
    $base_url = $protocol . $_SERVER['HTTP_HOST'];
    
    $config['base_url'] = $base_url . "/";
    

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

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

    【讨论】:

    • 感谢您提供更多更好的选择。为简单起见,[HTTPS 支持] (devot-ee.com/add-ons/https-support) 在一个小扩展中执行此操作;它还可以处理 site_url 和其他一些不太常见的设置,这很酷。我喜欢在 config.php 中执行此操作的想法,或者从那里需要的东西,我将它塞进我的工具箱!
    猜你喜欢
    • 2012-02-06
    • 2012-07-16
    • 2015-03-21
    • 1970-01-01
    • 2014-12-20
    • 2019-11-21
    • 2020-04-26
    • 2020-03-08
    • 1970-01-01
    相关资源
    最近更新 更多