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

#javascript #redirect #cloudflare #cloudflare-workers

#javascript #перенаправление #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)
}
  

»’

После этого в настройках домена я добавил worker и указал сайт domain1.com/test /*. Но это не сработало. Помогите, пожалуйста. Использует инструкции https://www.cloudsavvyit.com/3660/how-to-create-a-cloudflare-worker-to-redirect-requests /

Ответ №1:

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

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

Рабочие

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

  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 (если есть только один). Выберите worker, который вы создали на шаге 4. Save .

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

Правила страницы

Если вы не вынуждены использовать Workers для перенаправления, вы можете использовать Page Rules функцию Cloudflare, которая является более простым способом без кода.

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

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

  3. Создайте новое правило страницы. Введите исходный домен в поле URL match. При необходимости вы можете добавить путь. Выберите 301 или 302 HTTP-код — в зависимости от того, что имеет смысл в вашем случае. Вот пример конфигурации перенаправления:

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

Комментарии:

1. Спасибо за совет. Я знал об этой возможности. Но я вынужден использовать workers. Если я не найду, как это реализовать через workers, я сделаю этот метод

2. Похоже, что подход workers не работает ни с чем, кроме страницы index / default.

3. @Bangkokian это должно сработать, по крайней мере, у меня это работает в паре проектов. Включен ли рабочий на маршруте, с которого вы пытаетесь перенаправить? Если это так, вы можете выполнить отладку из рабочего кода, вернув переменные и проверив вывод в окне предварительного просмотра рядом с кодом. Любопытно узнать, в чем проблема, с которой вы столкнулись.

4. @MaxIvanov Возвращает ошибку 404 для всего, кроме target-domain.com корневая / индексная страница.

5. К сожалению, я не могу помочь без более широкого контекста: точная конфигурация маршрута worker; изменения, внесенные вами в код worker; запрошенный исходный URL и ожидаемый целевой URL.