事件场景
如果我们使用内网穿透把本地的 wordpress 服务穿透到公网上,同时希望仍能用内网 ip 访问后台的话,会遇到 wordpress 主站地址冲突的问题,即 wordpress 不知道要把内网 ip 当作地址还是把公网访问用的域名当作地址。
比如你的内网地址是192.168.1.114
外网地址可能是106.114.514.191,然后再套个dns,比如什么114514.persist1.cn
这是ipv4的情况,ipv6的太长了,反正一个情况
那wordpress到底用哪个?🫤
如果我们使用 https 协议访问 wordpress 会遇到无法登录进管理后台的问题。
内网穿透下的地址冲突
wordpress 会有两个重要参数
1.wordpress 地址
2.站点地址
tips: 大部分情况下个人网站两个值是一样的

正常来说,内网的wordpress后台管理应该是上图这样,显示的是内网的ip端口,比如这里的10.0.15.103就是我服务器的内网ipv4地址;
那你穿透后,使用外网的ip端口访问时,就会出现 502 Bad Gateway 错误响应,这显然是我们不想见到的。
解决方案
在wp-config.php文件里添加下面两行(别着急实操,先看到后面):
define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);可以自行定义http访问时的wordpress 地址和站点地址
我们可以通过区分https访问和http访问来解决内网访问和外网访问的地址冲突
if(is_numeric(substr($_SERVER['HTTP_HOST'],0,1)))
{
$http_type = 'http://';
}
else
{
$http_type = 'https://';
$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
}
define('WP_SITEURL', $http_type . $_SERVER['HTTP_HOST']);
define('WP_HOME', $http_type . $_SERVER['HTTP_HOST']);内网用http,外网用https(外网访问挂个ssl证书开tls验证)
同时https访问时,会开启https访问标识,并强制https登录
这段代码放在wp-config.php和wp-settings.php中,都有效果
此时,问题解决🥰
评论