我们有一个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>
不确定我还需要做什么。
答案 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 1和Source 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>
希望这可以帮助你......