[英]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 1和Source 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.