Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果初始连接是HTTPS,则将HTTP请求定向到HTTPS,但如果是HTTP,则不定向_Php_Wordpress_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php 如果初始连接是HTTPS,则将HTTP请求定向到HTTPS,但如果是HTTP,则不定向

Php 如果初始连接是HTTPS,则将HTTP请求定向到HTTPS,但如果是HTTP,则不定向,php,wordpress,apache,.htaccess,mod-rewrite,Php,Wordpress,Apache,.htaccess,Mod Rewrite,我有一个在Apache服务器上运行WordPress的站点,我正试图通过同一个站点提供HTTP和HTTPS连接。我希望在不强制重定向到HTTPS的情况下允许通过HTTP进行连接,除非客户端最初通过HTTPS进行连接,否则我希望所有后续HTTP请求都转发到HTTPS,以避免CORS问题和不安全的内容警告 我在如何单独使用mod_rewrite有效地实现这一点上遇到了一些问题。我发现的大多数解决方案都会尝试强制连接重定向到HTTPS,而不允许HTTP连接,反之亦然。我已经尝试了一些mod重写条件,包

我有一个在Apache服务器上运行WordPress的站点,我正试图通过同一个站点提供HTTP和HTTPS连接。我希望在不强制重定向到HTTPS的情况下允许通过HTTP进行连接,除非客户端最初通过HTTPS进行连接,否则我希望所有后续HTTP请求都转发到HTTPS,以避免CORS问题和不安全的内容警告

我在如何单独使用mod_rewrite有效地实现这一点上遇到了一些问题。我发现的大多数解决方案都会尝试强制连接重定向到HTTPS,而不允许HTTP连接,反之亦然。我已经尝试了一些mod重写条件,包括使用referer字符串,但到目前为止似乎都不起作用。我一定错过了一些东西,因为我觉得这确实是可能的,但我和我的搜索引擎都被难倒了

也许我只是做错了什么,或者这种功能超出了Mod_重写的范围? 我本来想使用PHP脚本,但担心它对一些静态文件不起作用,因为WordPress不能处理这些请求

更新:

我制作了一个php脚本来检测版本。它设置了一个cookie,该cookie在设置后20秒内过期,由Mod_Rewrite读取,如果设置,它将URL重定向到HTTPS。这适用于初始HTTPS请求的大多数后续请求。一些URL似乎不受其影响,不确定确切原因,因为cookie在这些文件请求时尚未过期,并且特定规则在htaccess文件中的静态文件绕过规则之前。无论如何,通过将文件URL设置为无协议版本,这是很容易修复的。
一些第三方站点需要重写域,因为它们提供来自其他域的https。在这一点上,如果不缓冲整个页面并重新编写URL,我认为这实际上是不可能的

tkausl是对的,你真的不需要重写mod_。你应该能够格式化没有协议的链接,它会自动为你选择

您可以看到google通过其托管库实现了这一点:


*注意缺少http:或https:这将遵循用户请求的协议

可以检测初始连接,但必须使用服务器端代码(如PHP脚本)进行检测。然后可以在Mod_重写级别使用检测

再加上WordPress约束,事情就会变得复杂起来

WordPress并不是为了方便一次安装而构建的,它使用两种协议都允许访问内容。因此,要实现这一点,需要一个使用前面提到的检测的自定义插件,而不是使用Mod_Rewrite在服务器上直接请求,我们必须缓冲WordPress输出并在页面中逻辑替换/重写URL,然后再将其发送给用户,如果且仅当页面的初始连接是SSL

我发现只有一个插件做了类似的事情,但是它不做动态检测,只给管理员/编辑器一个复选框选项来保护页面。这个插件叫做

动态检测和重定向并不是SSL的目的,它可以打开也可以关闭,大多数页面都需要这种方式。
我最初试图同时提供这两种证书,这样我就可以使用自签名证书,而不用担心用户通过强制他们只使用SSL连接而从浏览器中获得“警告不安全连接”消息


因此,我将购买一个证书或制作一个自定义插件。

问题在于,我无法在每次更新后编辑wordpress及其组件生成的链接,而无需对每个链接进行编辑。据我所知,wordpress中没有将链接协议设置为无协议版本的方法,也不会导致主题或插件出现问题。因此,我需要通过服务器进行检测和重定向,并在mod_重写级别进行,以避免在所有wordpress请求都指向https时,静态文件作为http进行访问。