You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将子域名部署的WordPress博客通过主站子目录/blog访问并修正内部链接问题求助

将子域名部署的WordPress博客通过主站子目录/blog访问并修正内部链接问题求助

我的场景和当前问题

我主站用Next.js搭建,部署在https://mysite.com;博客是WordPress,部署在子域名https://blog.mysite.com,两者用的是完全不同的服务器和托管平台。

我想让博客能通过主站的子目录https://mysite.com/blog访问,已经在Next.js里配置了rewrites规则,现在能打开博客首页,但博客里的内部链接、页面、文章、媒体资源依然指向原来的子域名,点击后会跳去https://blog.mysite.com,没办法在主站子目录下正常浏览。

我目前用的Next.js重写规则代码如下:

async rewrites() {
  return [
    {
      source: '/blog',
      destination: 'https://blog.mysite.com/',
    },
    {
      source: '/blog/:slug',
      destination: 'https://blog.mysite.com/:slug', // Matched parameters can be used in the destination
    },
  ]
},

我试过一些关于反向代理配置WordPress的方案,但调整后都把WordPress的配置搞坏了,现在卡在这,求大家帮忙解决。


整理的解决方案

别着急,这种反向代理下的WordPress内部链接跑偏问题很常见,核心就是要让WordPress“意识到”自己现在是通过主站的/blog子目录对外服务,而不是原来的子域名。下面是一步步的靠谱解决方法:

1. 修改WordPress核心站点设置

暂时还是通过子域名https://blog.mysite.com/wp-admin登录WordPress后台:

  • 进入「设置」→「常规」页面
  • 把「WordPress地址(URL)」和「站点地址(URL)」都改成https://mysite.com/blog
  • 点击保存设置,这时候后台可能会自动跳转到新的/blog/wp-admin地址,正常登录就行

2. 批量替换数据库里的旧链接

改完设置后,旧文章、旧页面里的图片、手动添加的链接可能还是指向子域名,这时候需要批量替换数据库内容:

  • 重要:先备份你的WordPress数据库,避免出错!
  • 用数据库管理工具(比如phpMyAdmin)打开WordPress的数据库
  • 执行以下SQL语句,把所有子域名链接替换成主站子目录链接:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://blog.mysite.com', 'https://mysite.com/blog');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'https://blog.mysite.com', 'https://mysite.com/blog');

提示:如果你的数据库前缀不是默认的wp_,要改成你自己的前缀哦

3. 优化Next.js的rewrites规则

原来的规则只覆盖了/blog和/blog/:slug,像/wp-content/下的图片、样式这类静态资源可能没被代理,建议把规则改成更全面的版本:

async rewrites() {
  return [
    {
      source: '/blog/:path*',
      destination: 'https://blog.mysite.com/:path*',
    },
  ]
},

这样所有/blog/开头的请求都会被转发到子域名的对应路径,包括各种静态资源,不会出现样式或图片加载失败的情况。

4. 配置WordPress的反向代理兼容

有时候WordPress会因为反向代理的头部信息不对,自动跳回子域名,这时候需要在WordPress根目录的wp-config.php文件里添加以下代码:

define('FORCE_SSL_ADMIN', true);
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}
define('WP_HOME', 'https://mysite.com/blog');
define('WP_SITEURL', 'https://mysite.com/blog');

这段代码能让WordPress正确识别反向代理过来的HTTPS请求,并且强制使用新的站点URL,避免跳转回子域名。

5. 清除所有缓存

最后一步别忘:

  • 清除WordPress的缓存(如果用了缓存插件,比如WP Rocket、W3 Total Cache)
  • 重新构建Next.js项目,清除生产环境的缓存
  • 自己浏览器也清一下缓存,然后测试所有链接和资源

踩坑提醒

  • 改数据库之前一定要备份!万一替换错了字段,还能恢复
  • 如果改完站点设置后登录不了后台,直接修改wp-config.php里的WP_HOME和WP_SITEURL也能生效
  • 测试的时候要多点点内部链接、图片、分页,确保所有内容都在/blog子目录下正常加载

备注:内容来源于stack exchange,提问作者kunal saxena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:34:29