内网穿透下的 wordpress 地址冲突问题与 https下的后台登陆问题

问题背景

当我们将个人博客搭建在 NAS 或软路由上,并通过 Cloudflare Zero Trust 或其他工具进行内网穿透以便公网访问时,可能会遇到以下两个问题:

  1. 内网穿透下的地址冲突
    使用内网穿透将本地的 WordPress 服务暴露到公网时,如果同时希望通过内网 IP 访问后台,会遇到 WordPress 主站地址冲突的问题。WordPress 无法确定是将内网 IP 还是公网域名作为主站地址。

  2. HTTPS 协议下无法登录管理后台
    使用 HTTPS 协议访问 WordPress 时,可能会遇到无法登录管理后台的问题。


解决方案

1. 内网穿透下的地址冲突

WordPress 有两个重要参数:WordPress 地址站点地址。通常情况下,这两个值是相同的。如果希望通过外网域名和内网 IP 同时访问,可以通过修改 wp-config.php 文件动态设置这两个参数。

wp-config.php 中添加以下代码:

$http_type = is_numeric(substr($_SERVER['HTTP_HOST'], 0, 1)) ? 'http://' : 'https://';
define('WP_SITEURL', $http_type . $_SERVER['HTTP_HOST']);
define('WP_HOME', $http_type . $_SERVER['HTTP_HOST']);

代码说明

  • 通过 is_numeric 判断访问地址的第一个字符是否为数字(即是否为 IP 地址)。
  • 如果是 IP 地址,使用 http://;如果是域名,使用 https://
  • 动态设置 WP_SITEURLWP_HOME,避免地址冲突。

2. HTTPS 登录管理后台

当使用 HTTPS 访问 WordPress 时,可能会遇到无法登录管理后台的问题。这是因为 WordPress 默认未强制启用 SSL。可以通过修改 wp-config.php 文件强制开启 SSL 访问。

wp-config.php 中添加以下代码:

$_SERVER['HTTPS'] = 'on';
define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

代码说明

  • 强制将 $_SERVER['HTTPS'] 设置为 on,确保 WordPress 识别 HTTPS 协议。
  • 启用 FORCE_SSL_LOGINFORCE_SSL_ADMIN,强制后台使用 HTTPS 登录。

综合解决方案

如果既需要通过 HTTPS 登录后台,又需要保留内网 IP 访问的能力,可以将上述代码结合使用:

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']);

代码说明

  • 如果是内网 IP 访问,使用 http://,不强制 HTTPS。
  • 如果是域名访问,使用 https://,并强制开启 HTTPS 登录。

总结

通过上述方法,可以解决内网穿透下的地址冲突问题,并确保 HTTPS 协议下能够正常登录 WordPress 管理后台。将代码添加到 wp-config.php 文件的最下方即可。

This entry was posted in 网络相关 and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *