Перенаправление с одного домена на другой в cloudflare worker не работает

Мне нужно настроить, чтобы запросы, соответствующие шаблону 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/


person dron    schedule 10.11.2020    source источник


Ответы (1)


У вас есть 2 варианта добавления переадресации в Cloudflare: правила страницы и рабочие.

В обоих случаях DNS-записи исходного домена должны быть проксированы (оранжевое облако включено).

Рабочие

  1. Откройте страницу исходного домена в панели управления Cloudflare.

  2. Перейдите на вкладку Workers.

  3. Manage Workers -> Create a Worker

  4. Добавьте следующий код. При совпадении путей он перенаправляет посетителя на целевой URL. Если нет совпадения, запрос будет отправлен на источник (домен-источник.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. При необходимости вы можете добавить путь. Выберите 301 или 302 код HTTP - в зависимости от того, что имеет смысл в вашем случае. Вот пример конфигурации перенаправления:

введите описание изображения здесь

person Max Ivanov    schedule 10.11.2020
comment
Спасибо за совет. Я знал об этой возможности. Но я вынужден использовать рабочих. Если не найду как реализовать через воркеры, сделаю вот такой способ - person dron; 11.11.2020
comment
Подход рабочих, похоже, не работает ни с чем, кроме страницы index / default. - person Bangkokian; 23.11.2020
comment
@Bangkokian, это должно работать, по крайней мере, у меня это работает в паре проектов. Включен ли у вас воркер на маршруте, с которого вы пытаетесь перенаправить? Если это так, вы можете отладить код рабочего, возвращая переменные и проверяя вывод в окне предварительного просмотра рядом с кодом. Любопытно узнать, в чем проблема. - person Max Ivanov; 23.11.2020
comment
@MaxIvanov Он возвращает ошибку 404 для всего, кроме корневой / индексной страницы target-domain.com. - person Bangkokian; 23.11.2020
comment
К сожалению, я не могу помочь без более широкого контекста: точная конфигурация маршрута рабочего; изменения, внесенные вами в рабочий код; запрошенный исходный URL и ожидаемый целевой URL. - person Max Ivanov; 23.11.2020