通过 wp-config.php 在 wordpress 上正确强制 SSL

更新于 2022年1月21日 wordpress教程

如果我编辑wp-config.php我应该添加:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

但是,我的网站有.htaccess规则,可以在整个网站上强制使用 https 和 www:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} ^website.com
RewriteRule ^(.*)$ https://www.website.com/$1 [L,R=301]

我知道还有其他重写器可用,但又不确定哪个是正确的。

我应该在wp-config.php使用以下哪三个

1 – 不带 isset(),带大括号,带 server_port

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

2 – 没有大括号和没有 server_port?

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

3 – 需要大括号/更好还是“更正确”并且需要 server_port 吗?

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

我在互联网上发现了一些其他略有不同的关于 wordpress SSL 的变体,但我无法弄清楚哪个是正确的/主要的……

解决方案

在这种情况下,PHP 代码根本不必处理 SSL。 这里应用了经典的SoC原则:如果您的代码没有明确地使用连接(在 WP 中它没有),您应该将协议检查留给 Web 服务器。

您还应该避免在重写规则中定义端口。 如果您不使用多站点 WP 设置,您可以尝试:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

我用过这个。 可以继续。

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
   $_SERVER['HTTPS']='on';

如果您的服务器端口与 443 不同,您可以指定它。 否则,无需再次使用它。

更正的 .htaccess 规则:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysslcertdomainname.com/$1 [R,L]

通常,Wordpress 不需要您的代码示例 (1,2,3),但看起来您有某种基于问题的代理。

  1. 不好如果 Web 服务器未设置HTTP_X_FORWARDED_PROTO生成 PHP 警告(标准 php 配置)。
  2. 在检查值之前, Good Checks 变量存在。 不产生警告。
  3. 最好**

** 作为一般规则,不鼓励更改_SERVER变量(如SERVER_PORTHTTPS ),除非您有一个不太常见的设置(即在代理后面 – 这是任何此代码的唯一原因)。

为此,我必须注释掉$_SERVER['HTTPS']='on';行周围的 if 语句行$_SERVER['HTTPS']='on';

我正在使用 Zevenet CE 5.9,它不提供 x-forwarded-for 或 x-forwarded-proto 的选项,因此为了将它放在反向代理后面,我们只是以这种方式强制 https :)。

如果您使用 docker 并避免手动配置(由人工),这对我有用:

if ( getenv('ENABLE_HTTPS')  === "true" ) {
  define( 'FORCE_SSL_ADMIN', true );
  $_SERVER['HTTPS']='on';
}

我只需要传递一个新变量ENABLE_HTTPS

docker run -d --name wordpress -it --rm -p 80:80 
-e DB_HOST=10.10.10.10:3306 
-e DB_USER=root 
-e DB_PASSWORD=secret 
-e DB_NAME=wordpress 
-e AUTH_KEY=$RANDOM_KEY 
-e SECURE_AUTH_KEY=$RANDOM_KEY 
-e NONCE_KEY=$RANDOM_KEY 
-e LOGGED_IN_KEY=$RANDOM_KEY 
-e AUTH_SALT=$RANDOM_KEY 
-e SECURE_AUTH_SALT=$RANDOM_KEY 
-e LOGGED_IN_SALT=$RANDOM_KEY 
-e NONCE_SALT=$RANDOM_KEY 
-e WP_DEBUG=true 
-e DISABLE_WP_CRON=true 
-e ENABLE_HTTPS=true wordpress:5.7.2

在functions.php中使用此代码

add_action('template_redirect', 'f_force_ssl');

function f_force_ssl()
{
    if (!is_ssl()) 
    {
        wp_redirect('https://' . $_SERVER['HTTP_HOST'] . 
        $_SERVER['REQUEST_URI'], 301);
        exit();
    }
}

你可能还喜欢下面这些文章

wordpress去除index.php的方法wordpress去除index.php的方法

wordpress去除index.php的方法:首先登录wordpress后台; RewriteRule . /wordpress/index.php [L] 这样就能把 wordpress 链接中的 index.php 去掉。

wordpress开启多站点方法wordpress开启多站点方法

本文介绍一下wordpress开启多站点以及开启多站点之后nginx的配置。 rewrite (.*) $1/index.php; rewrite (.*) /index.php;

wordpress智能自动摘要插件:wpaewordpress智能自动摘要插件:wpae

目前wordpress的摘要大多数由主题提供。 一直以来没有一款插件可以智能提取正文的关键内容作为摘要,于是自己动手做了一个,命名为wpae(wordpress auto excerpt)。

wordpress文章自动配图、缩略图插件:wpacwordpress文章自动配图、缩略图插件:wpac

现在写点文章不配图总觉得文章质量不太高。 于是萌生了写一款文章自动配图的插件的想法。 文章页自动加一张图比较简单,从候选集中选择一张图片拼接在正文中即可。 又比如在图片中添加文章标题,摘要或者自定义的文字。

蜂集采集器,一款全自动的wordpress采集插件蜂集采集器,一款全自动的wordpress采集插件

imwprobot(蜂集)是一款wordpress采集插件。 有什么功能1. 全自动无人值守,支持定时采集2. 可自动同步目标站的更新3. AI自动关键词、自动摘要生成4. 直接发布到wordpress,不需要额外的接口支持5. 正文图片和缩略图均可本地化6. 每个任务中的文章图片均可设置独立水印7. 采集到的内容均支持正则和css选择器替换可以采集哪些站1. 新闻资讯站2. 文章范文站3. BBS论坛4. 博客站点5. 资源站、下载站支持哪些采集规则1. 正则表达式2. XPath规则3. JQuery选择器(CSS选择器)代理支持1. HTTP代理 2. Socks5代理 哪些主机可以运行没有环境限制,虚拟主机都可以运行蜂集特色

如何将自定义 HTML 添加到 wp_nav_menu?如何将自定义 HTML 添加到 wp_nav_menu?

我熟悉 WordPress 并使用 WordPress 菜单系统。 在您的functions.php创建一个类,使用与父类非常相似的方法来扩展Walker_Nav_Menu :

wordpress关注微信公众号查看隐藏内容插件:北冥wordpress关注微信公众号查看隐藏内容插件:北冥

北冥插件是imwpweb开发的一款关注可复制、可查看隐藏内容的插件,想要为公众号涨粉不可错过哦~ 想要流量私域化,成本最低的方式就是让用户关注你的公众号,手段就是通过关注可以查看隐藏内容,复制内容。

如何在 WordPress 中查找 wp_head() 渲染的 HTML ?如何在 WordPress 中查找 wp_head() 渲染的 HTML ?

我查了很多,大部分人都说 wp_head() 位于 wp-includes/general-template.php wp_head() 位于 wp-includes/general-template.php。

好看 (0) 很好看 (0) 非常好看 (0)
赞赏

微信赞赏支付宝赞赏