我今天发现,如果你访问一个在文档头中的css链接路径中使用{site_url}标记的EE网站,那么如果你输入https而不是网站,该网站就无法加载CSS文件HTTP。
我已经通过使用htaccess文件来强制转到http,但我只是想知道EE中是否有一个设置可以更改以使两者都有效?
这只发生在Chrome和IE上,我猜测取决于您的浏览器设置是否允许安全。
答案 0 :(得分:7)
我对这个问题得到了很多帮助previously。我希望它现在也对你有用。
答案 1 :(得分:6)
很少有人知道您可以将协议相对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: 或RTps :)有效,按RTF 3986: 第4.2节。如果客户端呛到它, 那是客户的错,因为 他们没有遵守URI RFC中指定的语法。
您的示例有效且应该有效。 我已经使用了相对URL方法 我自己在交通繁忙的网站上 没有投诉。我们也是 在Firefox,Safari中测试我们的网站 IE6,IE7和Opera。这些浏览器全部 了解URL格式
答案 2 :(得分:5)
当我加载CSS和JS时,我从不使用域,我只是相对设置它。例如:
<link rel="stylesheet" href="/layout/styles/layout.css" >
如果你尝试这样做有用吗?
答案 3 :(得分:3)
您可以在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
答案 4 :(得分:1)
我使用Nginx。
我不知道为什么但是如果我使用绝对URL(完整路径)而不是相对(/
来启动域as CreateSean said处的字符串as Deviarte said,那么资源在各种浏览器中的加载速度要快得多,{ {1}}在协议comment by unexplainedBacn above处启动字符串)(或者他们使用相对URL加载速度较慢?我不知道。)。因此,他们的解决方案/实践(我曾经做过的事情......现在仍然这样做)都不适合我的环境。
相反,我所做的是config.php中的以下内容:
//
请注意,如果尚未存在,则可能必须向PHP提供scheme_url。如果像我一样你使用的是php-fpm,只需在你的配置中将其添加到你的nginx站点配置中所需的位置:
$config['base_url'] = $_SERVER["scheme_url"];
$config['site_url'] = $_SERVER["scheme_url"];
编辑:
环顾一下bootstrap / configs,有些人使用将协议添加到配置变量的方法(例如{{3}})。在Nginx中默认情况下没有HTTPS服务器变量,在ssl下的php的虚拟主机配置中添加以下内容:
fastcgi_param scheme_url "$scheme://$host/";
答案 5 :(得分:1)
所有
以下是我使用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变量设置的硬编码链接。
您需要在帖子/模板/变量/代码段中找到这些http调用,并用简单的//替换这些调用。 所以打电话给
http://example.com/some_file.html
现在应该是这样的:
//example.com/some_file.html.
这适用于绝对和相对URL。
对于您设置为EE文件上载目录的路径也是如此。确保将这些目录的URL更改为
//example.com/path/to/your/upload/directory
瞧,你应该好好去:)