首页 > 解决方案 > 在 cloudflare 工作人员中从一个域重定向到另一个域不起作用

问题描述

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

'''

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/

标签: javascriptredirectcloudflarecloudflare-workers

解决方案


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

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

工作人员

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

  2. 转到Workers选项卡。

  3. Manage Workers -> Create a Worker

  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)
}
  1. 返回到Workers源域的选项卡-> Add route。将 Route 设置为*.source-domain.com/*(如果您要匹配多个重定向路径)或*.source-domain.com/redirecting-path(如果只有一个)。选择您在步骤 4 中创建的工作人员Save

在此处输入图像描述

页面规则

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

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

  2. 转到Page Rules选项卡。

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

在此处输入图像描述


推荐阅读