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

Cloudflare路径托管WordPress遇登录无限重定向问题求助

问题分析与解决方案

整体方案的潜在问题

你用Cloudflare Worker做路径转发的思路本身可行,但核心问题出在请求/响应头的处理不完整——WordPress无法正确识别当前的请求上下文,触发内置重定向机制时就会陷入循环。Worker转发时如果没修正Host、X-Forwarded系列头等关键请求头,WP会误认为请求来自服务器IP而非example.com/he,登录重定向时就会反复跳转。

最优解决方案:改用Cloudflare Origin Rules(替代Worker)

相比Worker,Cloudflare的Origin Rules更适配这种路径转发场景,配置简单且能自动处理大部分头信息问题:

  1. 登录Cloudflare域名管理面板,进入「规则」→「源规则」
  2. 创建新规则:
    • 匹配条件:选择「路径」→「包含」,输入/he/*
    • 操作:添加「自定义源」,填入你的WordPress服务器IP(可带端口,比如11.2222.12.12:80);再添加「路径改写」,选择「替换路径」,匹配值填^/he(/.*)?,替换值填$1(移除/he前缀,让WP收到的是根路径请求)
  3. 保存规则后,WP就能正确识别example.com/he作为站点根URL,登录重定向不会再出错

若坚持使用Worker:修正脚本的头信息处理

如果一定要用Worker,需要在脚本中处理请求头和响应头的修正,确保WP能正确识别请求上下文,同时修正WP返回的重定向路径。示例脚本如下:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const reqUrl = new URL(request.url)
  // 只处理/he开头的路径
  if (!reqUrl.pathname.startsWith('/he')) return fetch(request)

  // 构造转发到WP服务器的URL,移除/he前缀
  const wpTargetUrl = new URL(`http://11.2222.12.12${reqUrl.pathname.replace(/^\/he/, '')}${reqUrl.search}`)
  
  // 修改请求头,让WP识别正确的域名和协议
  const modifiedReq = new Request(wpTargetUrl, {
    method: request.method,
    headers: new Headers(request.headers),
    body: request.body,
    redirect: 'manual'
  })
  modifiedReq.headers.set('Host', 'example.com')
  modifiedReq.headers.set('X-Forwarded-Host', 'example.com')
  modifiedReq.headers.set('X-Forwarded-Proto', reqUrl.protocol.slice(0, -1))

  let response = await fetch(modifiedReq)
  // 修正WP返回的重定向路径,加回/he前缀
  if (response.headers.has('Location')) {
    const locUrl = new URL(response.headers.get('Location'))
    if (locUrl.host === 'example.com') {
      locUrl.pathname = `/he${locUrl.pathname}`
      response = new Response(response.body, response)
      response.headers.set('Location', locUrl.toString())
    }
  }
  return response
}

WordPress端的配套配置

无论用Origin Rules还是Worker,都需要确保WP的配置正确:

  1. 修改wp-config.php,添加以下常量(覆盖数据库设置,避免冲突):
define('WP_HOME', 'https://example.com/he');
define('WP_SITEURL', 'https://example.com/he');
define('FORCE_SSL_ADMIN', true);
// 信任Cloudflare的反向代理,确保HTTPS识别正确
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
    $_SERVER['HTTPS'] = 'on';
}
// 配置登录Cookie的路径和域名
define('COOKIE_DOMAIN', 'example.com');
define('COOKIEPATH', '/he/');
  1. 验证数据库wp_options表中的siteurl和home字段值确实为https://example.com/he,避免残留旧配置

内容的提问来源于stack exchange,提问作者goldylucks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:24:28