WordPress将所有HTTPS重定向到HTTP

时间:2015-09-30 00:26:49

标签: wordpress .htaccess ssl

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

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

我们在野外有几个链接,通过https://链接回我们,如果用户访问网站时https://网站中断或用户在浏览器中收到警告消息。< / p>

最重要的是,我们需要将所有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>

不确定我还需要做什么。

5 个答案:

答案 0 :(得分:8)

这里的问题在于,在Apache或WordPress进入游戏之前,浏览器需要通过连接,执行SSL握手,交换(和验证)证书来建立与服务器的连接,并且仅在之后完成所有操作后,浏览器将发出HTTP请求,告知服务器它正在寻找哪些资源。

因此,没有.htaccess或WordPress插件可以在没有他们建立安全会话的情况下重定向用户。

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

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

如果您在没有付费的情况下查找大多数浏览器信任的证书,您可以从Let's Encrypt获得免费证书。

一句话,如果您希望在没有任何警告消息的情况下将HTTPS流量无缝重定向到HTTP,则需要从受信任的CA安装另一个SSL证书。

答案 1 :(得分:3)

如果您不想编辑.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

的底部

答案 2 :(得分:2)

扩展@HigherCoding的回答和@MrWhite的评论,以获得PHP函数在https端口存在但ssl认证无效,过期或不存在的站点上执行此操作:

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指出的那样 - 对于在https中输入您网址的用户而言,这仍然无法阻止可怕的提示。但如果碰巧点击可怕的提示,它会将它们重定向到http,这是不太可能的。看起来获得SSL证书可能是出于这个原因的最佳选择,对于一般安全性以及现在增加的Google排名和在将来。

答案 3 :(得分:0)

htaccess的方法很简单,特别是如果您无权访问WordPress中的管理区域。

只需将其粘贴到RewriteCond%{HTTPS}上

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

答案 4 :(得分:-2)

这会完全禁用https


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

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


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

希望这可以帮助你......