繁体   English   中英

WordPress 将所有 HTTPS 重定向到 HTTP

[英]WordPress redirect all HTTPS to HTTP

我们有一个 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>

不知道我还需要做什么。

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

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

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

如果您想将 HTTPS 流量重定向到 HTTP,不幸的是,您将必须获得有效证书并使用 .htaccess 或一些 PHP 代码进行重定向。

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

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

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

扩展@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作为 URL 一部分输入的用户的可怕提示。 但是,如果他们碰巧点击了可怕的提示,它会将他们重定向到http ,这不太可能。 出于这个原因,获得 SSL 证书似乎是最好的选择,无论是为了一般的安全性,还是为了提高现在和未来的 Google 排名。

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

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

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

除了你的行,请尝试在 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 );

希望你的错误会解决

这将完全禁用 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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM