我在AWS EC2实例上运行了一个Wordpress网站。这是通过AWS Elastic Load Balancer提供的,该平衡器启用了HTTPS,并带有我从亚马逊获得的证书。
目的是同时提供网站的http和https版本。加载http版本可以正常工作。
但是,当我加载https版本时,我收到混合内容错误,因为get_template_directory_uri()
始终返回http链接。负载均衡器的工作方式是TLS终止于LB,并通过端口80与实际的EC2实例进行通信。因此,实例本身没有HTTPS。
这很多都超出了我的治愈技能。我知道这足以弄清楚问题似乎是什么,但我真的不确定解决问题的正确方法是什么。
假设我仍然想要同时提供页面的http和https版本(页面上没有电子商务或身份验证 - 它只是提供信息),我应该如何解决此问题?
仅供参考,EC2实例在Amazon ABI上运行,基本上是RHEL。
答案 0 :(得分:2)
首先,您会发现很难同时运行相同数据库数据的http和https WordPress版本,因为WordPress会将大量链接保存为绝对链接(即使用http(s)://mydomain.com部分)和很多插件都不打扰适应当前的协议。
您最好的选择是通过htaccess文件重定向,将所有http流量重定向到https。
话虽如此,你可以通过get_template_directory_uri使用的过滤器实现你所要求的一种方式:
add_filter('template_directory_uri', 'smart_template_directory_uri', 10, 3);
function smart_template_directory_uri($template_dir_uri, $template, $theme_root_uri) {
return preg_replace('/^https?\:/i', '//', $template_dir_uri); // replace "http://" or "https://" by "//", which browsers will automatically set to the current page's protocol
}
希望这有帮助!