wordpress支持多域名访问功能简易设置教程
文章摘要
WordPress默认仅支持单域名访问,无法满足内网IP与外网多域名共存的场景需求。针对该问题,可通过三种方式实现多域名配置:修改wp-config.php文件设置WP_HOME和WP_SITEURL常量,优先级高于数据库配置但会导致后台设置项变灰;修改主题function.php文件实现相同效果;或使用Multiple Domain等插件操作更简便但依赖插件更新。实际应用中,若需快速调整可优先考虑数据库直接修改,而多域名场景则推荐配置文件方案或插件,需根据反向代理部署情况选择合适方式,同时注意静态资源地址需额外配置以确保完整访问。
Qwen3-14B · 2026-06-18

1 前言

当我们使用wordpress来搭建自己的个人博客的时候,经常会遇到的一个问题就是需要使用多种方式来访问wordpress。比如,在内网,我想要使用内网地址192.168.x.x来访问,在外网,我想用域名bbs1.example.com来访问,或者我也想用bbs2.example.com来访问。这种需求其实非常正常和普遍,但是在默认的wordpress里却不能实现,因为默认情况下wordpress会绑定初始化时使用的访问地址(有可能是IP,也有可能是域名)。


其实吧,如果ssl解密这一步不是wordpress自己来做(现在通常的做法是如果有反向代理,那么就在反向代理上进行ssl解密),那么其实wordpress锁定一个访问地址这个动作从安全角度来说意义并不大,因为能够通过反向代理到达wordpress的请求的访问域名肯定都是正确的。


为了使wordpress能够支持多域名访问,总的来讲有3种实现方式。

2 方式一:修改wp-config.php

初始化wordpress时绑定的访问域名是存储在数据库中,具体位置在wordpress对应的库中的表wp_options中:

image.png

所以很多改wordpress访问域名或者IP或者http改成https之类失败后导致的无法访问wordpress的问题,是可以通过直接修改数据库中地址来修复的,其中,home和siteurl,分别对应WordPress地址和站点地址,如下图:
image.png

注:如果要用直接修改数据库这种方式,可以使用命令行,也可以使用各种数据库客户端(DBeaver,phpadmin等)直接进行修改,这里我就不多说了,网上有很多文章介绍,这个不是我今天要说的重点。

而我们这节要讲的修改wp-config.php的方法,利用的是WordPress 中,同一个设置数据,常量的优先级高于在数据库里面定义的变量的原理。WordPress 有WP_HOME 和 WP_SITEURL 这两个常量,分别对应数据库中的home和siteurl,所以只要在wp-config.php中设置这2个常量,就会优先于数据库中的设置生效,有以下2种修改思路。

1、全放开,不做任何限制

在wp-config.php文件中的define('WP_DEBUG', false);后面添加如下代码:

$scheme = 'http';
if (
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'
) {
    $scheme = 'https';
}
define('WP_SITEURL', $scheme . '://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', $scheme . '://' . $_SERVER['HTTP_HOST']);

这段代码实现的功能,就是根据反向代理传递的真实访问协议(HTTP/HTTPS)和当前 Host,动态设置 WordPress 站点地址,确保在 Cloudflare Tunnel 或者常规反向代理环境下生成正确的 URL。

当然,采用这种方式的前提是能够达到wordpress的请求都是正常请求,所以这种方式只能和反向代理配合使用,或者通过安全手段过滤达到wordpress上的非法域名请求。

2、直接限定能够访问wordpress的域名

在wp-config.php文件中的define('WP_DEBUG', false);后面添加如下代码:

$host = $_SERVER['HTTP_HOST'];

$allowed_hosts = [
    'bbs1.example.com',
    'bbs2.example.com',
    'bbs3.example.com',
];

if (!in_array($host, $allowed_hosts)) {
    $host = 'bbs1.example.com';
}

$scheme = (
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'
) ? 'https' : 'http';

define('WP_SITEURL', $scheme . '://' . $host);
define('WP_HOME', $scheme . '://' . $host);

这段代码实现的功能,除了可以根据真实访问协议(HTTP/HTTPS)和当前 Host 动态设置 WordPress 站点地址以外,同时还通过 Host 白名单限制可接受的访问入口(比如上面代码中的bbs1.example.com,bbs2.example.com和bbs3.example.com,),防止非法 Host Header 导致WordPress 生成错误的 URL(如果是非法Host Header,则强制访问bbs1.example.com),适用于反向代理、多入口及直接部署等场景。

不过,需要注意的是,上面的2种方式对wordpress中的静态资源是无效的,例如上传到WP中的附件、图片等,如果要修改此类静态资源的地址,还需要插入如下代码:

define( 'WP_CONTENT_URL',  '//' . $_SERVER['HTTP_HOST'] . '/wp-content');

注:采用修改wp-config.php的方式,会导致后台设置界面siteurl和home变为灰色无法修改:

image.png

不过并不影响正常使用,就是看着可能有点不爽。


3 方式2:修改当前主题的 function.php

方式2其实和方式1一样,都是采用的设置WP_HOME 和 WP_SITEURL 这两个常量的方式,只不过方式1是在wp-config.php中设置,而方式2是在当前主题的function.php中进行设置。设置的内容都是一样的,这里就不再赘述了。

4 方式3:插件

实现多域名访问的插件应该不少,我之前使用的是Multiple Domain:

image.png

使用起来非常简单,直接添加用来访问的域名即可,如下图:
image.png

这插件其实很不错,就是太久没更新了,强迫症的我表示很不爽,所以我后来就换成修改wp-config.php的方式。

注:用插件这种方式不会导致后台设置界面siteurl和home变为灰色。

5 总结

不同的方法并没有绝对的优劣,关键还是取决于自己的实际需求。

如果只是将网站整体迁移到新的域名,而不需要保留旧域名访问,那么直接修改数据库中的站点地址通常是最简单、最直接的方案。配置完成后,WordPress 就会以新的域名正常运行,后续也几乎不需要额外维护。

如果需要同时支持多个访问入口,例如多个域名、内网 IP、反向代理、Cloudflare Tunnel、Tailscale 等场景,那么通过插件,或者在 wp-config.phpfunctions.php 中动态设置 WP_HOMEWP_SITEURL 会更加灵活。这种方式能够根据访问入口自动生成对应的站点地址,更适合一些特殊部署环境。

需要注意的是,wp-config.phpfunctions.php 中的设置优先级高于数据库,因此它们不仅可以作为日常配置方案,也可以作为一种”应急手段”。例如,当数据库中的站点地址配置错误,或者插件导致后台无法正常访问时,临时在代码中覆盖 WP_HOMEWP_SITEURL,往往能够快速恢复网站访问,再进入后台继续处理其他问题。


需要再次强调一下:

如果多域名访问采用设置WP_HOME 和 WP_SITEURL 这两个常量的方式,建议不要直接信任 $_SERVER['HTTP_HOST'],而应结合 Host 白名单进行限制,并根据反向代理传递的真实访问协议(如 X-Forwarded-Proto)动态判断 HTTP/HTTPS。

这样既能兼顾多入口访问的灵活性,又能避免非法 Host Header 导致 WordPress 生成错误的站点 URL,在 VPS 直连、反向代理以及 Cloudflare Tunnel 等部署场景下都会更加安全、可靠。


📌 内容结构提示:
这篇内容属于「博客知识地图」的一部分,你可以从这里查看完整内容路径: 博客知识地图
查看相关分类·3个匹配
📎 相关文章
分享这篇文章
博客内容均系原创,转载请注明出处!博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

👋 欢迎来到“无敌的个人博客”

这里主要围绕以下方向展开长期探索:

🧱 个人数字基础设施与博客系统构建
☁️ Cloudflare 与网络架构实践
🧠 AI 与知识系统探索
🛡️ 网络安全与访问优化
🎵 音乐与声音认知
👁️ 认知视角与世界观