【问题标题】:WordPress redirect all HTTPS to HTTPWordPress 将所有 HTTPS 重定向到 HTTP
【发布时间】:2015-12-27 15:14:59
【问题描述】:

我们有一个 WordPress 网站,并且曾经有一个 SSL 证书。 该网站以前都是 HTTPS,现在我们不再需要 SSL,所以我们让它过期。

我们已经将管理面板中的站点地址WordPress地址更改为http://example.com

我们有几个在野外使用https:// 链接回我们的链接,如果用户使用https:// 访问该站点,则该站点会中断或用户在其浏览器中收到警告消息。

归根结底,我们需要将所有https:// 流量重定向到http://

我尝试了几个插件(没有运气):

甚至更改了.htaccess 文件(仍然没有运气)

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

不知道我还需要做什么。

【问题讨论】:

    标签: wordpress .htaccess ssl


    【解决方案1】:

    除了你的行,请尝试在 wp-config.php 中添加这些行

    define( 'WP_CACHE', false ); 
    define('WP_HOME','http://adwordslead.com');
    define('WP_SITEURL','http://adwordslead.com');
    define('FORCE_SSL_ADMIN', false);
    define( 'FORCE_SSL_LOGIN', false );
    

    希望您的错误会得到解决

    【讨论】:

      【解决方案2】:

      htaccess 的方式很简单,尤其是当您无法访问 WordPress 中的管理区域时。

      只需将其粘贴到 RewriteCond %{HTTPS} on 下方即可

      RewriteRule (.*) HTTP://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
      

      【讨论】:

        【解决方案3】:

        扩展@HigherCoding 的答案和@MrWhite 的评论,以在存在https 端口但ssl 认证无效、过期或不存在的站点上获取PHP 函数:

        function shapeSpace_check_https() { 
        if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443) { 
            return true; 
        }
            return false;
        }
        
        
        function bhww_ssl_template_redirect() {
        if ( shapeSpace_check_https() ) {
            if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {    
                wp_redirect( preg_replace( '|^(https://)|', 'http://', $_SERVER['REQUEST_URI'] ), 301 );
                exit(); 
            } else {
                wp_redirect( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
                exit();     
            }
        }   
        }
        
        add_action( 'template_redirect', 'bhww_ssl_template_redirect');
        

        这在我的网站functions.php 上有效,并且是这两个来源的组合:Source 1Source 2

        正如@drew010 所指出的 - 对于在 URL 中输入 https 的用户,这仍然不会阻止可怕的提示。但是如果他们碰巧点击了可怕的提示,它会将他们重定向到http,这是不太可能的。出于这个原因,出于一般安全性以及现在和将来提高 Google 排名的考虑,似乎获得 SSL 证书可能是最佳选择。

        【讨论】:

        • 您应该使用 esc_url 转义 $_SERVER['REQUEST_URI'] 等全局变量,以防止任何形式的漏洞。
        • @WPExplorer ,感谢您的建议 - 我会在实施后更新我的答案。
        • 使用这个作为公认的解决方案可能会更好!谢谢
        【解决方案4】:

        这里的问题在于,在 Apache 或 WordPress 开始发挥作用之前,浏览器需要通过连接、执行 SSL 握手、交换(和验证)证书来通过 HTTPS 与服务器建立连接,并且只有在完成所有这些后,浏览器会发出 HTTP 请求,告诉服务器它正在寻找什么资源。

        因此,没有任何 .htaccess 或 WordPress 插件能够在不建立安全会话的情况下重定向用户。

        当然,如果您安装了自签名证书,那么在发生任何这种情况之前都会向用户显示警告。如果您偶然(似乎不是演员)通过 https 发送严格传输安全标头,那么以前的访问者的浏览器甚至可能不允许他们通过 HTTP 连接。

        如果您想将 HTTPS 流量重定向到 HTTP,很遗憾,您将不得不获取有效证书并使用 .htaccess 或一些 PHP 代码进行重定向。

        如果您正在寻找不受大多数​​浏览器信任且无需付费的证书,您可以从Let's Encrypt 获得免费证书。

        归根结底,如果您想将 HTTPS 流量无缝重定向到 HTTP 而没有任何警告消息,则需要安装来自受信任 CA 的另一个 SSL 证书。

        【讨论】:

        • 感谢您的正确答案,我尝试了我的方法并联系了我的托管服务提供商,但最后我明白没有正确和直接的方法可以在没有 ssl 的情况下将 https 重定向到 http。
        【解决方案5】:

        如果您不想编辑.htaccess,可以使用以下替代解决方案:

        add_action( 'template_redirect', 'nonhttps_template_redirect', 1 );
        
        function nonhttps_template_redirect() {
        
            if ( is_ssl() && !is_admin() ) {
        
                if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {
        
                    wp_redirect( preg_replace( '|^https://|', 'http://', $_SERVER['REQUEST_URI'] ), 301 );
        
                    exit();
        
                } else {
        
                    wp_redirect( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
        
                    exit();
        
                }
        
            }
        
        }
        

        你可以把它放在你主题的底部functions.php

        【讨论】:

        • 如前所述,如果 SSL 证书不存在或无效(“我们让它过期”),这有什么帮助? (见@drew010's answer
        • @MrWhite 在同一页面上查看我的答案:stackoverflow.com/a/47399052/6647188
        • 您应该使用 esc_url 转义 $_SERVER['REQUEST_URI'] 等全局变量,以防止任何形式的漏洞。
        【解决方案6】:

        这会完全禁用 https

        
            <IfModule mod_rewrite.c> 
                RewriteEngine On
                RewriteCond %{HTTPS} off
            </IfModule>
        

        这会启用 HTTPS,然后使用服务器变量将所有页面重定向到 HTTP:

        
            <IfModule mod_rewrite.c>
                RewriteEngine On
                RewriteCond %{HTTPS} on
                RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}
            </IfModule>
        

        希望对你有所帮助....

        【讨论】:

        • 不幸的是,这对于客户端在连接时由于证书过期或无效而出现的错误无济于事。需要安装有效的 SSL 证书才能无缝运行。
        • “这将完全禁用 https” - sn-p 无效并且不会做任何事情 - 它缺少 RewriteRule 指令。事实上,文件中的下一个RewriteRule 指令将被捕获,因此这甚至可能会破坏某些内容。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        • 1970-01-01
        • 2016-09-01
        • 2016-03-18
        • 2015-10-27
        • 2014-04-27
        • 2017-05-09
        相关资源
        最近更新 更多