我有一个在Apache服务器上运行WordPress的站点,我试图通过同一站点提供HTTP和HTTPS连接。我希望允许通过HTTP进行连接而不强制重定向到HTTPS,除非客户端最初通过HTTPS连接,然后我希望所有后续HTTP请求都转发到HTTPS以避免CORS和不安全内容警告的问题。
关于如何仅使用mod_rewrite有效地执行此操作,我遇到了一些问题。我发现大多数解决方案试图强制连接重定向到HTTPS,无论是否允许HTTP连接,反之亦然。我已经尝试了一些mod重写条件,包括使用referer字符串,但到目前为止似乎都没有。我必须遗漏一些东西,因为我觉得这确实是可能的,但我和我的搜索引擎都是难以接受的。
也许我只是做错了什么或者是Mod_Rewrite以外的这种功能? 我在考虑使用PHP脚本,但担心它不能用于某些静态文件,因为WordPress不处理这些请求。
更新
我已经制作了一个PHP脚本来检测版本。它设置一个cookie,它在设置后20秒内到期,由Mod_Rewrite读取,如果设置,则将URL重定向到HTTPS。这适用于初始HTTPS请求的大多数后续请求。一些URL似乎不受它的影响,不确定为什么因为cookie在这些文件请求时没有到期,并且特定规则在htaccess文件中的静态文件绕过规则之前。无论如何,通过将文件URL设置为无协议版本,可以轻松修复。 某些第三方网站需要重写域名,因为它们从其他域提供https。在那个说明中,我不认为这实际上是可能的,如果不缓冲整个页面并实际重写URL。
答案 0 :(得分:1)
可以检测初始连接,但这必须使用服务器端代码完成,如PHP脚本。然后使用检测可以在Mod_Rewrite级别完成。
添加WordPress约束,事情变得复杂。
WordPress的构建不是为了便于一次安装,而是允许两种协议访问内容。因此要实现这一点需要使用前面提到的检测的自定义插件,而不是使用Mod_Rewrite来引导服务器上的请求,我们必须缓冲WordPress输出并在它们转到用户之前逻辑上替换/重写页面中的URL和仅当页面的初始连接是SSL时。
我发现只有一个插件可以执行与此类似的操作,但它不进行动态检测只会为管理员/编辑提供一个复选框选项,以使页面SSL受到保护。该插件名为WordPress HTTPS
动态检测和重定向并不是SSL的意思,无论是打开还是关闭,大多数页面都需要它。
我最初试图提供两者,所以我可以使用自签名证书,而不必担心用户会得到警告不安全的连接"来自浏览器的消息,强制它们仅使用SSL连接。
因此,我将购买证书或制作自定义插件。
答案 1 :(得分:0)
tkausl是对的,你真的不需要做mod_rewrite。您应该能够在没有协议的情况下格式化链接,它将自动为您选择。
你可以看到google使用托管库执行此操作:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
*注意缺少http:或https:这将遵循用户请求的协议。