javascript - 在 cloudflare 工作人员中从一个域重定向到另一个域不起作用

标签 javascript redirect cloudflare cloudflare-workers

我需要配置与domain1.com/test// 模式匹配的请求,由domain2.com 应用程序提供服务。 尝试按如下方式配置它。 创建了一个worker,添加了代码

'''

const redirectMap = new Map([
  ['/test1', 'domain2.com'],
])

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

async function handleRequest(request) {
  let requestURL = new URL(request.url)
  let path       = requestURL.pathname.split('/redirect')[1]
    let location   = redirectMap.get(path)

  if (location) {
    return Response.redirect(location, 301)
  }
  
  return fetch(request)
}

'''

之后,在域设置中,我添加了一个工作人员并指定了站点domain1.com/test/*。 但这没有用。请帮助。 使用说明https://www.cloudsavvyit.com/3660/how-to-create-a-cloudflare-worker-to-redirect-requests/

最佳答案

您有 2 个选项可以在 Cloudflare 中添加重定向:页面规则和工作线程。

在这两种情况下,源域的 DNS 记录都必须经过代理(橙色云开启)。

worker

  1. 在 Cloudflare 仪表板中打开源域页面。

  2. 转到工作人员选项卡。

  3. 管理工作人员 -> 创建工作人员

  4. 添加以下代码。在匹配路径上,它将重定向访问者到目标 URL。如果没有匹配请求将被发送到源(source-domain.com)。

const redirectHttpCode = 301
const redirectMap = new Map([
  ['/redirecting-path', 'https://target-domain.com'],
])

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

/**
 * Respond to the request
 * @param {Request} request
 */
async function handleRequest(request) {
  const url = new URL(request.url)
  const { pathname } = url

  const targetUrl = redirectMap.get(pathname)
  if (targetUrl) {
    return Response.redirect(targetUrl, redirectHttpCode)
  }

  return fetch(request)
}
  • 返回源域的 Workers 选项卡 -> 添加路由。将路由设置为 *.source-domain.com/* (如果您要匹配多个重定向路径)或 *.source-domain.com/redirecting-path (如果只有一个)。选择您在第 4 步中创建的工作器。保存
  • enter image description here

    页面规则

    如果您不被迫使用 Workers 进行重定向,您可以利用 Cloudflare 的 Page Rules 功能,这是一种更简单的无代码方法。

    1. 在 Cloudflare 仪表板中打开源域页面。

    2. 转到页面规则选项卡。

    3. 创建新的页面规则。在 URL 匹配字段中输入源域。如果需要,您可以添加路径。选择 301302 HTTP 代码 - 根据您的情况选择。以下是重定向配置示例:

    enter image description here

    关于javascript - 在 cloudflare 工作人员中从一个域重定向到另一个域不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64766046/

    相关文章:

    ssl - 使用 Cloudflare SSL 证书 + nginx letsencrypt 证书进行双重加密?

    javascript - 在动态插入的文本字符串上触发 jQuery

    javascript - 使用 headObject 从 S3 文件获取 x-amz-meta

    PHP header ( "Location:/404.php", true, 404 )不起作用

    http - 浏览器中的本地 HTTP 重定向

    python - Cloudflare KV API批量PUT-错误10012-无法将KVPair解码为中间结构

    javascript - JS 文件未加载到 html 中

    javascript - 贪心算法

    Apache 服务器 : direct to specific worker based on deployed applications in Tomcat

    python - 在 python 上使用 cloudflare 保护连接到 websocket